### 15.8.7 配置 InnoDB I/O 容量

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

这`InnoDB`主线程和其他线程在后台执行各种任务，其中大部分与 I/O 相关，例如从缓冲池中刷新脏页以及将更改缓冲区中的更改写入相应的二级索引。`InnoDB`尝试以不会对服务器的正常工作产生不利影响的方式执行这些任务。它尝试估计可用的 I/O 带宽并调整其活动以利用可用容量。

这[`innodb_io_capacity`](innodb-parameters.html#sysvar_innodb_io_capacity)变量定义了可用的总体 I/O 容量`InnoDB`.它应该设置为大约系统每秒可以执行的 I/O 操作数 (IOPS)。什么时候[`innodb_io_capacity`](innodb-parameters.html#sysvar_innodb_io_capacity)已设置，`InnoDB`根据设定值估计后台任务可用的 I/O 带宽。

你可以设置[`innodb_io_capacity`](innodb-parameters.html#sysvar_innodb_io_capacity)到 100 或更大的值。默认值为`200`.通常，100 左右的值适用于消费级存储设备，例如最高 7200 RPM 的硬盘驱动器。更快的硬盘驱动器、RAID 配置和固态驱动器 (SSD) 受益于更高的价值。

理想情况下，将设置保持在尽可能低的水平，但不要太低以至于后台活动落后。如果该值太高，则会从缓冲池中删除数据，并且更改缓冲区的速度太快，以至于缓存无法提供显着的好处。对于具有更高 I/O 速率的繁忙系统，您可以设置一个更高的值来帮助服务器处理与高速率行更改相关的后台维护工作。通常，您可以根据使用的驱动器数量增加该值`InnoDB`输入/输出。例如，您可以增加使用多个磁盘或 SSD 的系统的价值。

对于低端 SSD，默认设置 200 通常就足够了。对于更高端的总线连接 SSD，请考虑更高的设置，例如 1000。对于具有单个 5400 RPM 或 7200 RPM 驱动器的系统，您可以将该值降低到 100，这表示可用于执行约 100 IOPS 的老一代磁盘驱动器的每秒 I/O 操作 (IOPS) 的估计比例。

尽管您可以指定一个较大的值，例如一百万，但实际上这样大的值几乎没有什么好处。通常，不建议使用高于 20000 的值，除非您确定较低的值不足以满足您的工作负载。

调优时考虑写入工作负载[`innodb_io_capacity`](innodb-parameters.html#sysvar_innodb_io_capacity).具有大量写入工作负载的系统可能会受益于更高的设置。对于写入工作量较小的系统，较低的设置可能就足够了。

这[`innodb_io_capacity`](innodb-parameters.html#sysvar_innodb_io_capacity)设置不是每个缓冲池实例的设置。可用 I/O 容量在缓冲池实例之间平均分配以进行刷新活动。

您可以设置[`innodb_io_capacity`](innodb-parameters.html#sysvar_innodb_io_capacity)MySQL 选项文件中的值 (`我的.cnf`要么`我的.ini`) 或在运行时使用[`设置全球`](set-variable.html)语句，它需要足够的权限来设置全局系统变量。看[第 5.1.9.1 节，“系统变量权限”](system-variable-privileges.html).

#### 忽略检查点的 I/O 容量

这[`innodb_flush_sync`](innodb-parameters.html#sysvar_innodb_flush_sync)默认情况下启用的变量会导致[`innodb_io_capacity`](innodb-parameters.html#sysvar_innodb_io_capacity)设置在 I/O 活动突发期间被忽略[检查站](glossary.html#glos_checkpoint).遵守由定义的 I/O 速率[`innodb_io_capacity`](innodb-parameters.html#sysvar_innodb_io_capacity)设置，禁用[`innodb_flush_sync`](innodb-parameters.html#sysvar_innodb_flush_sync).

您可以设置[`innodb_flush_sync`](innodb-parameters.html#sysvar_innodb_flush_sync)MySQL 选项文件中的值 (`我的.cnf`要么`我的.ini`) 或在运行时使用[`设置全球`](set-variable.html)语句，它需要足够的权限来设置全局系统变量。看[第 5.1.9.1 节，“系统变量权限”](system-variable-privileges.html).

#### 配置最大 I/O 容量

如果冲洗活动落后，`InnoDB`可以更积极地刷新，每秒 I/O 操作 (IOPS) 比定义的更高[`innodb_io_capacity`](innodb-parameters.html#sysvar_innodb_io_capacity)多变的。这[`innodb_io_capacity_max`](innodb-parameters.html#sysvar_innodb_io_capacity_max)变量定义了执行的最大 IOPS 数`InnoDB`这种情况下的后台任务。

如果您指定一个[`innodb_io_capacity`](innodb-parameters.html#sysvar_innodb_io_capacity)在启动时设置，但不指定值[`innodb_io_capacity_max`](innodb-parameters.html#sysvar_innodb_io_capacity_max),[`innodb_io_capacity_max`](innodb-parameters.html#sysvar_innodb_io_capacity_max)默认为值的两倍[`innodb_io_capacity`](innodb-parameters.html#sysvar_innodb_io_capacity)或 2000，以较大者为准。

配置时[`innodb_io_capacity_max`](innodb-parameters.html#sysvar_innodb_io_capacity_max), 两倍[`innodb_io_capacity`](innodb-parameters.html#sysvar_innodb_io_capacity)通常是一个很好的起点。默认值 2000 适用于使用 SSD 或多个常规磁盘驱动器的工作负载。对于不使用 SSD 或多个磁盘驱动器的工作负载，2000 的设置可能太高，并且可能允许过多的刷新。对于单个常规磁盘驱动器，建议设置在 200 到 400 之间。对于高端的总线连接 SSD，请考虑更高的设置，例如 2500。与innodb_io_capacity[`设置，保持设置尽可能低，但不要太低以至于`](innodb-parameters.html#sysvar_innodb_io_capacity)InnoDB`不能将 IOPS 的速率充分扩展到超出`innodb_io_capacity[`环境。`](innodb-parameters.html#sysvar_innodb_io_capacity)调优时考虑写入工作负载

innodb_io_capacity_max[`.`](innodb-parameters.html#sysvar_innodb_io_capacity_max)具有大量写入工作负载的系统可能会受益于更高的设置。对于写入工作量较小的系统，较低的设置可能就足够了。innodb_io_capacity_max

[`不能设置为低于`](innodb-parameters.html#sysvar_innodb_io_capacity_max)innodb_io_capacity[`价值。`](innodb-parameters.html#sysvar_innodb_io_capacity)环境

innodb_io_capacity_max[`到`](innodb-parameters.html#sysvar_innodb_io_capacity_max)默认`用一个`放[`陈述 （`](set-variable.html)设置全局 innodb_io_capacity_max=DEFAULT`） 套`innodb_io_capacity_max[`到最大值。`](innodb-parameters.html#sysvar_innodb_io_capacity_max)这

innodb_io_capacity_max[`限制适用于所有缓冲池实例。`](innodb-parameters.html#sysvar_innodb_io_capacity_max)它不是每个缓冲池实例的设置。
