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