#### 15.8.3.4 配置 InnoDB 缓冲池预取（预读）

[](<>)[](<>)[](<>)[](<>)[](<>)

一种[预读](glossary.html#glos_read_ahead)request 是预取多个页面的 I/O 请求[缓冲池](glossary.html#glos_buffer_pool)异步，以预期对这些页面的迫在眉睫的需求。请求将所有页面合二为一[程度](glossary.html#glos_extent).`InnoDB`使用两种预读算法来提高 I/O 性能：

**线性**预读是一种基于缓冲池中按顺序访问的页面预测很快可能需要哪些页面的技术。你控制什么时候`InnoDB`通过使用配置参数调整触发异步读取请求所需的顺序页面访问次数来执行预读操作[`innodb_read_ahead_threshold`](innodb-parameters.html#sysvar_innodb_read_ahead_threshold).在添加此参数之前，`InnoDB`只会在读取当前范围的最后一页时计算是否对整个下一个范围发出异步预取请求。

配置参数[`innodb_read_ahead_threshold`](innodb-parameters.html#sysvar_innodb_read_ahead_threshold)控制敏感度`InnoDB`用于检测顺序页面访问的模式。如果从数据块顺序读取的页数大于或等于[`innodb_提前读取___阈值`](innodb-parameters.html#sysvar_innodb_read_ahead_threshold),`InnoDB`启动以下整个区段的异步预读操作。[`innodb_提前读取___阈值`](innodb-parameters.html#sysvar_innodb_read_ahead_threshold)可以设置为0-64之间的任何值。默认值为56。值越高，访问模式检查越严格。例如，如果将该值设置为48，`InnoDB`仅当当前区段中的48页已被顺序访问时，才会触发线性预读请求。如果值为8，`InnoDB`触发异步预读，即使按顺序访问数据块中只有8页。您可以在MySQL中设置此参数的值[配置文件](glossary.html#glos_configuration_file)，或使用[`设置全局`](set-variable.html)语句，它需要足够的权限来设置全局系统变量。看见[第5.1.9.1节，“系统变量权限”](system-variable-privileges.html).

**随机的**预读是一种技术，它根据缓冲池中已经存在的页面，预测何时可能很快需要页面，而不考虑这些页面的读取顺序。如果在缓冲池中找到来自同一区段的13个连续页面，`InnoDB`异步发出预取数据块剩余页面的请求。要启用此功能，请设置配置变量[`innodb_random_预读`](innodb-parameters.html#sysvar_innodb_random_read_ahead)到`在…上`.

这个`显示引擎INNODB状态`命令显示统计信息，以帮助您评估预读算法的有效性。统计信息包括以下全局状态变量的计数器信息：

-   [`Innodb_buffer_pool_read_ahead_`](server-status-variables.html#statvar_Innodb_buffer_pool_read_ahead)

-   [`Innodb_缓冲区_池_读取_提前_驱逐`](server-status-variables.html#statvar_Innodb_buffer_pool_read_ahead_evicted)

-   [`Innodb\u缓冲区\u池\u预读\u rnd`](server-status-variables.html#statvar_Innodb_buffer_pool_read_ahead_rnd)

    这些信息在微调[`innodb_random_预读`](innodb-parameters.html#sysvar_innodb_random_read_ahead)背景

    有关I/O性能的更多信息，请参阅[第8.5.8节，“优化InnoDB磁盘I/O”](optimizing-innodb-diskio.html)和[第8.12.1节，“优化磁盘I/O”](disk-issues.html).
