預讀請求是一種 I/O 請求,用於非同步地預取緩衝池中的多個頁面,以預期即將需要這些頁面。這些請求會引入一個區塊中的所有頁面。InnoDB
使用兩種預讀演算法來改善 I/O 效能。
線性預讀是一種技術,根據依序存取的緩衝池中的頁面來預測哪些頁面可能很快就會被需要。您可以調整觸發非同步讀取請求所需的依序頁面存取次數來控制 InnoDB
執行預讀操作的時間,方法是使用配置參數 innodb_read_ahead_threshold
。在新增此參數之前,InnoDB
只會在讀取目前區塊的最後一頁時,才會計算是否要針對整個下一個區塊發出非同步預取請求。
組態參數 innodb_read_ahead_threshold
控制 InnoDB
在偵測循序頁面存取模式時的敏感度。如果從一個區塊循序讀取的頁面數量大於或等於 innodb_read_ahead_threshold
,InnoDB
就會啟動對後續整個區塊的非同步預讀操作。innodb_read_ahead_threshold
的值可以設定為 0 到 64 之間的任何值。預設值為 56。值越高,存取模式檢查就越嚴格。例如,如果您將值設定為 48,則 InnoDB
僅在目前區塊中循序存取 48 個頁面時才會觸發線性預讀請求。如果值為 8,即使在區塊中僅循序存取 8 個頁面,InnoDB
也會觸發非同步預讀。您可以在 MySQL 組態檔中設定此參數的值,或者使用 SET GLOBAL
語句動態變更,這需要足夠的權限才能設定全域系統變數。請參閱第 7.1.9.1 節,「系統變數權限」。
隨機預讀是一種技術,它會根據緩衝池中已有的頁面預測何時可能很快需要其他頁面,而與這些頁面讀取的順序無關。如果緩衝池中找到來自同一區塊的 13 個連續頁面,則 InnoDB
會非同步發出請求,以預先提取該區塊的剩餘頁面。要啟用此功能,請將組態變數 innodb_random_read_ahead
設定為 ON
。
SHOW ENGINE INNODB STATUS
語句會顯示統計資訊,以幫助您評估預讀演算法的有效性。統計資訊包含以下全域狀態變數的計數器資訊:
在微調 innodb_random_read_ahead
設定時,此資訊會很有用。
有關 I/O 效能的更多資訊,請參閱第 10.5.8 節,「最佳化 InnoDB 磁碟 I/O」和第 10.12.1 節,「最佳化磁碟 I/O」。