mysql髒頁是什麼
在mysql中,當記憶體資料頁和磁碟資料頁上的內容不一致時,則稱這個記憶體頁為髒頁。刷髒頁的場景:1、當redo log寫滿,mysql就會暫停所有更新操作,將同步這部分日誌對應的髒頁同步到磁碟;2、系統記憶體不足時,需要淘汰一部分資料頁,如果淘汰的是髒頁,就要先將髒頁同步到磁碟;3、MySQL認為系統空閒的時候,有機會就同步記憶體資料到磁碟,這種沒有效能問題。
本教學操作環境:windows7系統、mysql8版本、Dell G3電腦。
髒頁(記憶體頁)
- 乾淨頁:記憶體和磁碟中的資料一致
- 髒頁:記憶體和磁碟中的資料不一致
為什麼會出現髒頁
平常很快的更新操作,都是在寫記憶體和日誌。
他並不會馬上同步
到磁碟資料頁,這時記憶體資料頁跟磁碟資料頁內容不一致,我們稱之為髒頁
。
這裡面就涉及 mysql 的記憶體管理機制
記憶體管理機制簡述
緩衝區中包含這三大類別清單。分別為:LRUList
、FreeList
、FlushList
。
在資料庫剛啟動時,LRUlist中沒有資料頁
。 FreeList存放空閒頁。
- 當需要讀取某個頁時,會從FreeList中取得空閒頁,讀入資料後,放入LRUlist中
- 如果FreeList中沒有空閒頁了,那麼根據LRU演算法淘汰Lru列表中末位的頁
- 當LRUlist中的頁被修改後,頁就變成了髒頁,這個頁也會被加入FlushList中
#注意:這時這個頁既在LRUlist中,又在FlushList中。
總結:LRUList(管理已經被讀取的頁)和FreeList(管理空閒的頁)用來管理頁的可用性;FlushList(管理髒頁)用來管理髒頁的刷新
在髒頁資料同步到磁碟過程中,如果對該磁碟資料頁執行SQL 語句。執行速度就會變慢
資料修改和讀取只依賴緩衝區行不行
#如果資料修改和讀取只依賴記憶體的緩衝區,那麼一旦資料庫宕機,記憶體中的資料都會遺失。所以MySQL使用之前講過的redo log來實現異常重啟的資料復原。
簡單來說,就是在更新緩衝區之前,先寫入redo log,確保異常重啟之後可以正常恢復緩衝區中的資料。
為什麼髒頁一定要刷新
- 上面說了資料只放在緩衝區,會出現
資料庫宕機,記憶體資料遺失
。所以需要刷新到磁碟。 - redo log如果無限大或有許多個檔案的話,系統中有大量的修改操作,一旦宕機,恢復的時間也會非常長。
所以自然而然,我們就一定需要把記憶體中的髒頁按照某種規則刷新到磁碟中,有了刷新這個操作,緩衝區的大小問題和redo log的大小問題都可以解決。
- 緩衝區不需要無限大了,因為可以持久化到磁碟
- redo log也不需要無限大了,因為一旦持久化到磁碟,redo log中對應的那部分數據就可以釋放。
刷髒頁有下面4種場景
#當
redo log 寫滿
,mysql就會暫停所有更新
操作,將同步這部分日誌對應的髒頁同步到磁碟
。系統
記憶體不足
時,需要淘汰
一部分資料頁,如果淘汰的是髒頁
,就要先將髒頁同步到磁碟
。MySQL 認為系統
空閒
的時候,有機會就同步
記憶體資料到磁碟,這種沒有效能問題。MySQL 正常關閉
,MySQL 會把記憶體的髒頁都同步到磁碟
上,這樣下次MySQL 啟動的時候,就可以直接從磁碟上讀取數據,啟動速度會很快。這種沒有效能問題。
會造成的影響
#如果是redo log 寫滿了
要盡量避免redo log 寫滿
。否則整個系統的更新都會停止。 此時寫的效能變成 0
,必須等待該日誌對應髒頁同步完成
後才能更新,這時就會導致 sql 語句 執行的很慢。
【相關推薦:mysql影片教學】
#以上是mysql髒頁是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

MySQL是一個開源的關係型數據庫管理系統。 1)創建數據庫和表:使用CREATEDATABASE和CREATETABLE命令。 2)基本操作:INSERT、UPDATE、DELETE和SELECT。 3)高級操作:JOIN、子查詢和事務處理。 4)調試技巧:檢查語法、數據類型和權限。 5)優化建議:使用索引、避免SELECT*和使用事務。

可以通過以下步驟打開 phpMyAdmin:1. 登錄網站控制面板;2. 找到並點擊 phpMyAdmin 圖標;3. 輸入 MySQL 憑據;4. 點擊 "登錄"。

MySQL是一種開源的關係型數據庫管理系統,主要用於快速、可靠地存儲和檢索數據。其工作原理包括客戶端請求、查詢解析、執行查詢和返回結果。使用示例包括創建表、插入和查詢數據,以及高級功能如JOIN操作。常見錯誤涉及SQL語法、數據類型和權限問題,優化建議包括使用索引、優化查詢和分錶分區。

選擇MySQL的原因是其性能、可靠性、易用性和社區支持。 1.MySQL提供高效的數據存儲和檢索功能,支持多種數據類型和高級查詢操作。 2.採用客戶端-服務器架構和多種存儲引擎,支持事務和查詢優化。 3.易於使用,支持多種操作系統和編程語言。 4.擁有強大的社區支持,提供豐富的資源和解決方案。

Redis 使用單線程架構,以提供高性能、簡單性和一致性。它利用 I/O 多路復用、事件循環、非阻塞 I/O 和共享內存來提高並發性,但同時存在並發性受限、單點故障和不適合寫密集型工作負載的局限性。

MySQL和SQL是開發者必備技能。 1.MySQL是開源的關係型數據庫管理系統,SQL是用於管理和操作數據庫的標準語言。 2.MySQL通過高效的數據存儲和檢索功能支持多種存儲引擎,SQL通過簡單語句完成複雜數據操作。 3.使用示例包括基本查詢和高級查詢,如按條件過濾和排序。 4.常見錯誤包括語法錯誤和性能問題,可通過檢查SQL語句和使用EXPLAIN命令優化。 5.性能優化技巧包括使用索引、避免全表掃描、優化JOIN操作和提升代碼可讀性。

MySQL在數據庫和編程中的地位非常重要,它是一個開源的關係型數據庫管理系統,廣泛應用於各種應用場景。 1)MySQL提供高效的數據存儲、組織和檢索功能,支持Web、移動和企業級系統。 2)它使用客戶端-服務器架構,支持多種存儲引擎和索引優化。 3)基本用法包括創建表和插入數據,高級用法涉及多表JOIN和復雜查詢。 4)常見問題如SQL語法錯誤和性能問題可以通過EXPLAIN命令和慢查詢日誌調試。 5)性能優化方法包括合理使用索引、優化查詢和使用緩存,最佳實踐包括使用事務和PreparedStatemen

構建 SQL 數據庫涉及 10 個步驟:選擇 DBMS;安裝 DBMS;創建數據庫;創建表;插入數據;檢索數據;更新數據;刪除數據;管理用戶;備份數據庫。
