读前请求是指异步预取缓冲池中多个页面的 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”。