配置InnoDB缓冲池预取(预读)
一个预读请求是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页时,才触发线性预读请求。如果值为8InnoDB
即使依次访问扩展区中的多达8页,也会触发异步预读。您可以在MySQL 配置文件中设置此参数的值,或使用SET GLOBAL
语句动态更改此参数,该语句需要足够的权限来设置全局系统变量。请参见“系统变量特权”。
随机预读是一种技术,它根据缓冲池中已有的页面来预测何时可能需要使用页面,而不管这些页面的读取顺序如何。如果在缓冲池中找到相同范围的13个连续页面,则InnoDB
异步发出请求以预取该范围的其余页面。要启用此功能,请将配置变量设置innodb_random_read_ahead
为ON
。
该SHOW ENGINE INNODB STATUS
命令显示统计信息,以帮助您评估预读算法的有效性。统计信息包括以下全局状态变量的计数器信息:
Innodb_buffer_pool_read_ahead
Innodb_buffer_pool_read_ahead_evicted
Innodb_buffer_pool_read_ahead_rnd
在微调innodb_random_read_ahead
设置时,此信息可能很有用。
有关I / O性能的更多信息,请参见“优化InnoDB磁盘I / O”和“优化磁盘I / O”。