預讀請求是一種 I/O 請求,用於非同步預取緩衝池中的多個頁面,以預期即將需要這些頁面。這些請求會引入一個範圍中的所有頁面。InnoDB
使用兩種預讀演算法來提高 I/O 效能。
線性預讀是一種技術,它會根據緩衝池中依序存取的頁面來預測很快可能需要哪些頁面。您可以透過調整觸發非同步讀取請求所需的依序頁面存取次數,使用設定參數 innodb_read_ahead_threshold
來控制 InnoDB
何時執行預讀操作。在新增此參數之前,InnoDB
僅會在讀取目前範圍的最後一頁時,計算是否針對整個下一個範圍發出非同步預取請求。
設定參數 innodb_read_ahead_threshold
控制 InnoDB
在偵測依序頁面存取模式時的靈敏度。如果從範圍依序讀取的頁面數大於或等於 innodb_read_ahead_threshold
,則 InnoDB
會啟動整個後續範圍的非同步預讀操作。innodb_read_ahead_threshold
可以設定為 0-64 的任何值。預設值為 56。值越高,存取模式檢查就越嚴格。例如,如果您將值設定為 48,則只有當目前範圍中有 48 個頁面已依序存取時,InnoDB
才會觸發線性預讀請求。如果該值為 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」。