Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  Configuring InnoDB I/O Capacity

17.8.7 InnoDB I/O容量配置

InnoDB 主线程和其他线程在后台执行各种任务,大多数是I/O相关的任务,如从缓冲池中刷新脏页和将更改 buffer 写入适当的次要索引。InnoDB 尝试以不影响服务器正常工作的方式执行这些任务。它尝试估算可用的I/O带宽,并根据可用容量调整活动。

innodb_io_capacity 变量定义了对 InnoDB 的总I/O容量。它应该设置为系统每秒可以执行的I/O操作数(IOPS)。当innodb_io_capacity 设置时,InnoDB 根据设置值估算背景任务的I/O带宽。

您可以将innodb_io_capacity 设置为100或更高。默认值是10000。通常,高速硬盘、RAID 配置和固态驱动器(SSD)受益于较高的值,而低端存储设备,如7200 RPM硬盘,则不太需要。

理想情况下,保持设置的值尽量低,但不要太低,以免背景活动落后。如果值太高,数据将从缓冲池和更改缓存中移除太快,从而无法提供明显的缓存 benefit。对于忙碌系统,可以将值设置得更高,以帮助服务器处理与高行变化率相关的背景维护工作。通常,您可以根据用于InnoDB I/ O 的磁盘数量来增加值。例如,在使用多个磁盘或SSDs的系统上,您可以增加值。

虽然您可以指定一个高值,如100万,但在实际应用中,这样的大值对性能影响很小。通常,超过20000的值不推荐,除非您确定较低的值不足以满足您的工作负载。请参阅innodb_io_capacity_max选项,该选项在flushing落后时自动增加该值。

在调整innodb_io_capacity时,考虑写入工作负载。具有大规模写入工作负载的系统可能会从更高的设置中受益。较低的设置可能足以满足具有小规模写入工作负载的系统。

innodb_io_capacity设置不是每个缓冲池实例的设置。可用的I/O容量将等分地分布于缓冲池实例中,以便flushing活动。

您可以在 MySQL 选项文件 (my.cnfmy.ini) 中设置innodb_io_capacity值,也可以在运行时使用SET GLOBAL语句,需要具有设置全局系统变量的权限。请参阅第7.1.9.1节,“系统变量权限”

默认情况下启用的innodb_flush_sync变量会在检查点期间忽略innodb_io_capacity设置,以确保在 I/O 活动的高峰期保持 I/O 速率。要遵守innodb_io_capacityinnodb_io_capacity_max设置,请禁用innodb_flush_sync

您可以在 MySQL 选项文件 (my.cnfmy.ini) 中设置innodb_flush_sync 值,也可以在运行时使用SET GLOBAL 语句,该语句需要具有设置全局系统变量的权限。请参阅第7.1.9.1节,“系统变量权限”

如果flush活动落后,InnoDB 可以Flush更加积极地,具有更高的I/O操作每秒(IOPS)速率(定义于innodb_io_capacity 变量)。innodb_io_capacity_max 变量定义了在这种情况下InnoDB 背景任务执行的最大IOPS数量。

如果您在启动时指定innodb_io_capacity 设置,但没有指定innodb_io_capacity_max 值,innodb_io_capacity_max 将默认为innodb_io_capacity 的两倍。

在配置innodb_io_capacity_max时,通常将其设置为innodb_io_capacity的两倍作为起点。与innodb_io_capacity设置一样,尽量将设置保持在实际可行的最低值,但不能太低,以免InnoDB无法满足IOPS的扩展率超过innodb_io_capacity设置。

在调优innodb_io_capacity_max时,需要考虑写入工作负载。具有大规模写入工作负载的系统可能会受益于更高的设置。对于具有小规模写入工作负载的系统,较低的设置可能已经足够。

innodb_io_capacity_max不能设置为小于innodb_io_capacity值的任何值。

使用innodb_io_capacity_max设置为DEFAULTSET语句(SET GLOBAL innodb_io_capacity_max=DEFAULT)将设置innodb_io_capacity_max为默认值。从MySQL 8.4开始,这将设置为默认值,而不是最大值。在 MySQL 8.3之前,这将设置为最大值。

innodb_io_capacity_max限制适用于所有缓冲池实例。它不是每个缓冲池实例的设置。