InnoDB之LRU的改進

爲什麼不採用樸素的LRU算法,直接將讀取的頁放入到LRU列表的首部呢?

因爲若直接讀取到的頁放入到LRU的首部,那麼某些SQL操作可能會使緩衝池中的頁被刷新出,從而影響緩衝池的效率。常見的這類操作爲索引或數據的掃描操作。這類操作需要訪問表中的許多頁,甚至是全部的頁,而這些頁通常來說又僅在這次查詢操作中需要,並不是活躍的熱點數據。如果頁被放入LRU列表的首部,那麼非常可能將所需要的熱點數據頁從LRU列表移除,而在下一次需要讀取該頁時,InnoDB存儲引擎需要再次訪問磁盤。

解決方案:InnoDB存儲引擎引入了另一個參數來進一步管理LRU列表,這個參數是Innodb_old_blocks_time,用於表示頁讀取到mid位置後需要等待多久纔會被加入到LRU列表的熱端。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章