14.8.3.4 配置 InnoDB 缓冲池预取(预读)

read-ahead请求是一个 I/O 请求,用于异步预取buffer pool中的多个页面,因为预计不久将需要这些页面。请求将所有页面都放在extent中。 InnoDB使用两种预读算法来提高 I/O 性能:

线性 预读是一项技术,该技术根据 Sequences 访问的缓冲池中的页面来预测不久将需要哪些页面。您可以使用配置参数innodb_read_ahead_threshold来调整触发异步读取请求所需的 Sequences 页面访问数,从而控制InnoDB何时执行预读操作。在添加此参数之前,InnoDB仅在读取当前扩展区的最后一页时,才计算是否对整个下一个扩展区发出异步预取请求。

配置参数innodb_read_ahead_threshold控制InnoDB在检测 Sequences 页面访问模式中的敏感度。如果从扩展区 Sequences 读取的页面数大于或等于innodb_read_ahead_threshold,则InnoDB启动整个后续扩展区的异步预读操作。 innodb_read_ahead_threshold可以设置为 0-64 之间的任何值。默认值为 56.值越大,访问模式检查越严格。例如,如果将值设置为 48,则InnoDB仅在 Sequences 访问了当前扩展区中的 48 页时触发线性预读请求。如果该值为 8,则InnoDB会触发异步预读,即使依次访问了该范围中的多达 8 页也是如此。您可以在 MySQL configuration file中设置此参数的值,或使用SET GLOBAL语句动态更改此参数,该语句需要足够的权限来设置全局系统变量。参见第 5.1.8.1 节“系统变量特权”

随机 预读是一项技术,它根据缓冲池中已有的页面来预测何时可能需要该页面,而不管这些页面的读取 Sequences 如何。如果在缓冲池中找到来自同一扩展区的 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”