配置InnoDB I / O容量
在InnoDB
主线程和其他线程在后台执行各种任务,其中大部分是I / O相关的,如从缓冲池刷新脏页,写从改变缓冲更改相应的二级指标。InnoDB
尝试以不会对服务器的正常工作产生不利影响的方式执行这些任务。它尝试估计可用的I / O带宽并调整其活动以利用可用容量。
该innodb_io_capacity
变量定义提供给整体的I / O容量InnoDB
。应该将其设置为大约系统每秒可以执行的I / O操作数(IOPS)。当innodb_io_capacity
设置,InnoDB
估计I / O带宽可以根据设定值后台任务。
您可以设置innodb_io_capacity
为100或更大的值。默认值为200
。通常,大约100的值适用于消费级存储设备,例如最高7200 RPM的硬盘驱动器。更快的硬盘驱动器,RAID配置和固态驱动器(SSD)受益于更高的价值。
理想情况下,将设置保持在尽可能低的水平,但又不要过低,以免后台活动落后。如果该值太大,则会从缓冲池中删除数据,并且过快地更改缓冲区以进行缓存会带来很大的好处。对于具有较高I / O速率的繁忙系统,可以设置较高的值,以帮助服务器处理与高行更改率相关的后台维护工作。通常,您可以根据用于InnoDB
I / O 的驱动器数量来增加该值。例如,您可以在使用多个磁盘或SSD的系统上增加该值。
对于低端SSD,默认设置200通常就足够了。对于高端的,总线连接的SSD,请考虑更高的设置,例如1000。对于具有单个5400 RPM或7200 RPM驱动器的系统,您可以将该值降低为100,这表示可以执行约100 IOPS的较老磁盘驱动器每秒可用的I / O操作(IOPS)的估计比例。
尽管您可以指定一个较高的值,例如一百万,但实际上,这样的大值几乎没有好处。通常,建议不要使用大于20000的值,除非您确定较低的值不足以满足您的工作量。
调整时请考虑写入工作量innodb_io_capacity
。写入工作量较大的系统可能会受益于更高的设置。对于写入工作量较小的系统,较低的设置可能就足够了。
该innodb_io_capacity
设置不是每个缓冲池实例设置。可用I / O容量在缓冲池实例之间平均分配以进行刷新活动。
您可以innodb_io_capacity
在MySQL选项文件(my.cnf
或my.ini
)中设置值,或在运行时使用一条SET GLOBAL
语句对其进行修改,该语句要求具有足以设置全局系统变量的特权。请参见“系统变量特权”。
忽略检查点的I / O容量
innodb_flush_sync
默认情况下启用的变量使innodb_io_capacity
设置在检查点发生I / O活动突发时被忽略。要遵守innodb_io_capacity
设置定义的I / O速率,请禁用innodb_flush_sync
。
您可以innodb_flush_sync
在MySQL选项文件(my.cnf
或my.ini
)中设置值,或在运行时使用一条SET GLOBAL
语句对其进行修改,该语句要求具有足以设置全局系统变量的特权。请参见“系统变量特权”。
配置最大I / O容量
如果刷新活动落后,则InnoDB
可以以比innodb_io_capacity
变量定义更高的每秒I / O操作速率(IOPS)更积极地进行刷新。该innodb_io_capacity_max
变量定义InnoDB
在这种情况下由后台任务执行的最大IOPS数。
如果innodb_io_capacity
在启动时指定设置,但未指定的值innodb_io_capacity_max
,则innodb_io_capacity_max
默认值为的值的两倍innodb_io_capacity
,最小值为2000。
配置时innodb_io_capacity_max
,innodb_io_capacity
通常将两倍作为一个好的起点。默认值2000适用于使用SSD或多个常规磁盘驱动器的工作负载。对于不使用SSD或多个磁盘驱动器的工作负载,设置为2000可能太高,并且可能允许过多的刷新。对于单个常规磁盘驱动器,建议设置在200到400之间。对于高端的,总线连接的SSD,请考虑较高的设置,例如2500。与该innodb_io_capacity
设置一样,保持设置尽可能低,但又不要太低,以至于InnoDB
无法将IOPS速率充分扩展到该innodb_io_capacity
设置之外。
调整时请考虑写入工作量innodb_io_capacity_max
。具有较大写工作负载的系统可能会受益于更高的设置。对于写入工作量较小的系统,较低的设置可能就足够了。
innodb_io_capacity_max
不能将其设置为小于该innodb_io_capacity
值的值。
设置innodb_io_capacity_max
为DEFAULT
使用SET
语句(SET GLOBAL innodb_io_capacity_max=DEFAULT
)设置innodb_io_capacity_max
为最大值。
该innodb_io_capacity_max
限制适用于所有缓冲池实例。它不是每个缓冲池实例设置。