首頁  >  文章  >  資料庫  >  mysql髒頁是什麼

mysql髒頁是什麼

青灯夜游
青灯夜游原創
2023-04-14 10:41:301521瀏覽

在mysql中,當記憶體資料頁和磁碟資料頁上的內容不一致時,則稱這個記憶體頁為髒頁。刷髒頁的場景:1、當redo log寫滿,mysql就會暫停所有更新操作,將同步這部分日誌對應的髒頁同步到磁碟;2、系統記憶體不足時,需要淘汰一部分資料頁,如果淘汰的是髒頁,就要先將髒頁同步到磁碟;3、MySQL認為系統空閒的時候,有機會就同步記憶體資料到磁碟,這種沒有效能問題。

mysql髒頁是什麼

本教學操作環境:windows7系統、mysql8版本、Dell G3電腦。

髒頁(記憶體頁)

  • 乾淨頁:記憶體和磁碟中的資料一致
  • 髒頁:記憶體和磁碟中的資料不一致

為什麼會出現髒頁

平常很快的更新操作,都是在寫記憶體和日誌。 他並不會馬上同步到磁碟資料頁,這時記憶體資料頁跟磁碟資料頁內容不一致,我們稱之為髒頁

這裡面就涉及 mysql 的記憶體管理機制

記憶體管理機制簡述

緩衝區中包含這三大類別清單。分別為:LRUListFreeListFlushList

在資料庫剛啟動時,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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn