MySQL 8.0 之 I/O优化参数
在MySQL的InnoDB存储引擎中,InnoDB的主线程和其他线程在后台执行各种任务,其中大多数与I/O相关,例如从缓冲池中刷新脏页,以及将更改从更改缓冲区写入适当的二级索引,日志体系刷新。如:binlog , redo ,undo 和一些大型操作临时表楼盘等操作。维持MySQL数据库的高性能I/O性能是一个关键的因素。虽然目前的硬件设备I/O有很大的提升,但随着数据量增加和大批量操作的加入,会在I/O上出现瓶颈。
MySQL的I/O瓶颈通常指的是数据库服务器的磁盘I/O性能不足以满足数据库操作的需求。这可能表现为查询响应时间慢、写入操作缓慢或者服务器负载高。
I/O性能不足出现的MySQL错误提示如下:
##错误日志
[ERROR] [FATAL] InnoDB: Semaphore wait has lasted > 600 seconds. We intentionally crash the server
because it appears to be hung.
##错误日志
[ERROR] InnoDB: Trying to do I/O to a tablespace which does not exist. I/O type: read, page: [page id: space=32, page number=57890], I/O length: 16384 bytes。
##错误日志
[ERROR] InnoDB: Error: io_setup() failed with EAGAIN after 5 attempts.
InnoDB: You can disable Linux Native AIO by setting innodb_use_native_aio = 0 in my.cnf
##错误日志
[ERROR] [FATAL] InnoDB: fsync() returned EIO, aborting.
##SHOW PROCESSLIST中 Status状态
mysql> SHOW PROCESSLIST;
+----+-------+-----------+------+---------+------+---------------------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+-------+-----------+------+---------+------+---------------------------+------------------+
| 12 | tester| localhost | test | Query | 0 | Waiting for handler commit| insert... |
+----+-------+-----------+------+---------+------+---------------------------+------------------+
1 row in set, 1 warning (0.00 sec)