Innodb特性之Read-Ahead(Buffer Pool Prefetching)

guocun09發表於2020-10-18

Read-Ahead官方說明: https://dev.mysql.com/doc/refman/5.7/en/innodb-performance-read_ahead.html


設計目的:

Read-Ahead用於非同步預取buffer pool中的多個page的一個預測行為。

InnoDB使用兩種提前預讀Read-Ahead演算法來提高I/O效能。


Linear read-ahead:線性預讀

如果一個extent中的被順序讀取的page超過或者等於   innodb_read_ahead_threshold  引數變數時,Innodb將會非同步的將下一個extent讀取到buffer pool中,innodb_read_ahead_threshold可以設定為0-64的任何值(注:innodb中每個extent就只有64個page),預設為56。值越大,訪問模式檢查就越嚴格。

Mark:官網說會預讀取下一個extent,但當前extent剩下沒有取完的page也會一起讀取嘛? 還不沒找到說明


Random read-ahead:隨機預讀

如果當同一個extent中連續的13個page在buffer pool中發現時,Innodb會將該extent中的剩餘page讀到buffer pool中。控制引數  innodb_random_read_ahead  預設沒有開啟。


評估預讀演算法的有效性

The  SHOW ENGINE INNODB STATUS command displays statistics to help you evaluate the effectiveness of the read-ahead algorithm. Statistics include counter information for the following global status variables:

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

相關文章