预读请求是一种 I/O 请求,用于异步预取
缓冲池中的多个页面
,以预期很快需要这些页面。请求在一个范围内引入所有页面
。
InnoDB
使用两种预读算法来提高 I/O 性能:
线性预读是一种根据缓冲池中被顺序访问的页面来预测可能很快需要哪些页面的技术。您可以通过使用配置参数调整触发异步读取请求所需的顺序页面访问次数来控制何时InnoDB
执行预读操作
innodb_read_ahead_threshold
。在没有添加该参数之前,InnoDB
只会在读取当前extent的最后一页时才计算是否对整个next extent发出异步预取请求。
配置参数
innodb_read_ahead_threshold
控制InnoDB
检测顺序页面访问模式的敏感程度。如果从一个区段中顺序读取的页数大于或等于
innodb_read_ahead_threshold
,
则InnoDB
启动整个后续区段的异步预读操作。
innodb_read_ahead_threshold
可以设置为 0-64 之间的任何值。默认值为 56。值越高,访问模式检查越严格。例如,如果将值设置为 48,则InnoDB
仅当当前盘区中的 48 页已被顺序访问时,才会触发线性预读请求。如果值为 8,InnoDB
触发异步预读,即使顺序访问区中的页面只有 8 个。您可以在 MySQL配置文件中设置该参数的值,或者使用语句动态更改它
SET
GLOBAL
,这需要足够的权限来设置全局系统变量。请参阅
第 5.1.8.1 节,“系统变量权限”。
随机预读是一种根据缓冲池中已有的页面预测何时可能很快需要页面的技术,而不管这些页面的读取顺序如何。如果在缓冲池中发现来自同一区段的 13 个连续页面,则
InnoDB
异步发出请求以预取该区段的剩余页面。要启用此功能,请将配置变量设置
innodb_random_read_ahead
为
ON
.
该SHOW ENGINE INNODB STATUS
命令显示统计信息以帮助您评估预读算法的有效性。统计信息包括以下全局状态变量的计数器信息:
此信息在微调
innodb_random_read_ahead
设置时很有用。
有关 I/O 性能的更多信息,请参阅 第 8.5.8 节,“优化 InnoDB 磁盘 I/O”和 第 8.12.2 节,“优化磁盘 I/O”。