innodb_io_capacity
WARNING
Rule IDs: io_001
Overview
- Purpose
- Documented in the MySQL 8.4 manual as a server system variable (scope: Global). Purpose and semantics are described at the linked manual page.
- Dynamic (MySQL 8.4 reference)
- MySQL 8.4 marks this variable as dynamic (
Dynamic= Yes). Runtime changes useSET GLOBAL(global scope) orSET SESSION(session scope) — confirm syntax and persistence (SET PERSIST) in the manual. - Default value
- 200 (MySQL 8.4)
- Version and product notes
- MariaDB and Percona Server may use different names, defaults, or dynamic behavior; verify their documentation.
- Documentation
- https://dev.mysql.com/doc/refman/8.4/en/innodb-parameters.html#sysvar_innodb_io_capacity
- Other vendors
What is checked
Rules that reference this variable, with their severity and what each rule detects:
- WARNING
io_001: For SSDs, set innodb_io_capacity to 2000-4000 (~66% of device max IOPS). For NVMe, 4000-10000. Setting too high negates change buffer benefits.
Tuning guidance
- Recommended actions:
- For SSDs, set innodb_io_capacity to 2000-4000 (~66% of device max IOPS). For NVMe, 4000-10000. Setting too high negates change buffer benefits.
- Trade-offs: Higher I/O capacity values push more writes to disk, reducing lag and crash recovery time, but can saturate storage on spinning disks. Match settings to your storage hardware (SSD vs HDD).
Example
SET GLOBAL innodb_io_capacity = 2000;
SET GLOBAL innodb_io_capacity_max = 4000;
-- SSD: 2000-10000, HDD: 200-800
Always validate on a non-production instance first. Use SET PERSIST (MySQL 8.0+) for changes that should survive restarts.