【Mysql】讀書筆記之--innodb_buffer_pool記憶體的管理

小亮520cl發表於2017-03-09
讀書內容:技術內幕第二章

1.記憶體與磁碟

基本流程圖如下:
  1. 在資料庫中進行讀取頁的操作時,首先將磁碟讀取到的頁放入緩衝池中,這個過程稱之為FIX頁到緩衝池,下次再讀取到相同的頁時,先判斷是否在緩衝池中,如果在則直接從緩衝池讀取,如果不在則迴圈FIX的過程
  2. 在資料庫中進行修改頁的操作時,首先修改緩衝池中的頁,然後再以一定的頻率重新整理到磁碟(checkpoint的重新整理機制)



2.LRU列表

lru列表用來管理bf已讀取到的頁
  1. 讀取到的新頁,放入到LRU列表的midpoint位置,處於lru列表的5/8處,而不是直接放入頭部,midpoint之前稱之為new列表,即熱資料區,之後稱之為old列表,即是非熱資料區


  2. 為什麼不直接放入LRU列表的頭部呢?
  3. 如果直接放入頭部,某些sql如:(select * from 大表 )可能會使一些熱資料刷出lru列表,下次讀的時候又要從磁碟重新整理到緩衝池!從而影響緩衝池的效率!為了解決這個問題,引入另一個引數innodb_old_blocks_time來管理LRu列表,
  4. 這個參數列示,頁讀取到midpoint位置之後還需要等待多久才會被加入到LRU列表的熱端!

 

3.Free列表

Free列表管理bf未操作過的頁
  1. 資料庫剛啟動時,LRU列表是空的,這時頁都是存放在free列表中的,當需要讀取新的頁時,首先從free列表查詢是否有可用的空閒頁,有就從free列表刪除,遷移至LRu列表。如果free列表沒有可用的空閒頁,則根據LRU演算法,淘汰列表末尾的頁,將記憶體分配給新的頁。
  2. old頁加入到new頁我們就稱之為page made young



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29096438/viewspace-2135018/,如需轉載,請註明出處,否則將追究法律責任。

相關文章