Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Configuring InnoDB Buffer Pool Prefetching (Read-Ahead)

17.8.3.4 配置InnoDB缓冲池预读(读取提前)

一个读取提前请求是一个异步I/O请求,以预期即将需要这些页面的页面在缓冲池中。这些请求将整个范围内的所有页面带入。InnoDB使用两种读取提前算法来改善I/O性能:

线性读取提前是一种技术,基于缓冲池中的页面顺序访问来预测可能需要的页面。您可以通过调整配置参数innodb_read_ahead_threshold来控制何时InnoDB执行读取提前操作。在添加该参数之前,InnoDB仅在读取当前范围的最后一页时计算是否发出异步预取请求整个下一个范围。

配置参数innodb_read_ahead_threshold控制InnoDB检测顺序页面访问模式的敏感度。如果从一个范围中顺序读取的页面数大于或等于innodb_read_ahead_thresholdInnoDB将启动异步读取提前操作整个下一个范围。innodb_read_ahead_threshold可以设置为0-64之间的任何值。默认值为56。该值越高,访问模式检查越严格。例如,如果您将该值设置为48,InnoDB仅在当前范围中顺序访问48页时触发线性读取提前请求。如果该值为8,InnoDB将在当前范围中顺序访问仅8页时触发异步读取提前请求。您可以在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”