配置InnoDB主线程I/O速率
InnoDB中的主线程是在后台执行各种任务的线程。这些任务大多数都与I/O相关,比如从缓冲池刷新脏页,或者将更改从插入缓冲区写入适当的二级索引。主线程试图以不影响服务器正常工作的方式执行这些任务。它试图估计可用的空闲I/O带宽,并调整其活动以利用这些空闲容量。从历史上看,InnoDB已经使用了硬编码值 100 IOPs(每秒输入/输出操作数)作为服务器的总I/O容量。
innodb_io_capacity表示InnoDB可用的总I/O容量。该参数应该设置为系统每秒可以执行的I/O操作数。该值取决于您的系统配置。当设置innodb_io_capacity时,主线程会根据设置的值来估算后台任务可用的I/O带宽。将该值设置为100将恢复到原来的行为。
innodb_io_capacity可以设置为100或更大的任意值。默认值是200,这反映了典型的现代I/O设备的性能要高于早期的MySQL。通常,前面的默认值100左右的值适合消费者级存储设备,比如高达7200 rpm的硬盘驱动器。更快的硬盘驱动器、RAID配置和ssd受益于更高的值。
innodb_io_capacity设置是所有缓冲池实例的总限制。当脏页被刷新时,innodb_io_capacity限制将在缓冲池实例中平均分配。更多信息请参见innodb_io_capacity系统变量描述。
您可以在MySQL选项文件(my.cnf或my.ini)中设置该参数的值,或者使用set GLOBAL命令动态更改它,该命令需要超级权限
innodb_flush_sync配置选项会导致innodb_io_capacity设置在检查点发生I/O突发时被忽略。Innodb_flush_sync默认开启。
以前,InnoDB主线程还执行任何需要的清除操作。在MySQL 5.6.5及以上版本中,这些I/O操作被转移到其他后台线程,其数量由innodb_purge_threads配置选项控制。