mysql怎么监控磁盘IO使用率_配置iostat观察与innodb读写线程调整

老晨君_4545

老晨君_4545

2026-05-01

627人浏览

原创

iostat -x -k -d 1 能看到设备级io详细指标(如%util、await、aqu-sz、r/s、w/s、rkb/s、wkb/s等),但不能看到进程级io归属、mysql内部写类型(日志/数据页)、sql语句或innodb脏页刷写来源。

mysql怎么监控磁盘io使用率_配置iostat观察与innodb读写线程调整

iostat -x -k -d 1 能看到什么,不能看到什么

iostat 是系统级快照工具,它不关联 MySQL 进程、不解析 SQL、也不区分 InnoDB 的日志写还是数据页写。你只能看到设备层的宏观 IO 压力:比如 %util 接近 100%、w_await 持续 >20ms、aqu-sz(平均队列深度)飙升到 5 以上——这些是磁盘响应已吃紧的明确信号。

但以下情况它完全无法判断:

  • svctm 字段在现代内核中已失效,必须忽略
  • 只看 w/s 高,却没结合 wkB/s 和 wareq-sz,就可能误判:比如 4KB 小写密集型负载和 128KB 大块写对 SSD 的压力完全不同
  • 看不到请求来源:是 ib_logfile0 在狂写?还是 ibdata1 或某个表空间在刷脏页?还是 mysqldump 正在拷贝?

SHOW ENGINE INNODB STATUS 中 FILE I/O 部分怎么看

执行 SHOW ENGINE INNODB STATUS\G 后,重点盯住 FILE I/O 小节里的这几项:

  • pending normal aio reads/writes:非零且持续不降 → 真实 IO 阻塞已发生,不是假象
  • log i/o's done 远高于 buffer pool i/o's done → 日志写压倒性占优,说明事务提交频繁或 innodb_flush_log_at_trx_commit=1 + sync_binlog=1 组合正在起效
  • os file reads / os file writes 数值本身不重要,要看它们随时间是否线性增长;突增往往对应大查询或批量导入

如果这里 pending 不为零,同时 Innodb_buffer_pool_wait_free 开始上涨,基本可以确认是脏页刷得太慢,而不是 SQL 慢。

MySQL
MySQL

编写正确的MySQL查询,避免字符集、索引和锁方面的常见陷阱。

下载

innodb_io_capacity 和 innodb_write_io_threads 怎么配

这两个参数必须协同调,否则一个设高了另一个没跟上,等于白调。

  • innodb_io_capacity 应设为磁盘随机写 IOPS 的 50%~75%,不是标称值。例如一块标称 5000 IOPS 的 NVMe,实际稳定可用约 3500,那么设 2500 更稳妥;设成 8000 反而因锁竞争导致有效吞吐下降
  • innodb_io_capacity_max 建议设为 innodb_io_capacity 的 2 倍,防止 checkpoint lag 触发紧急刷盘,造成 IO 尖峰
  • innodb_write_io_threads 默认是 4,SSD 上可提到 8~12,但必须匹配队列深度:用 iostat -x 1 观察 aqu-sz,如果长期 >2 且 w_await 升高,说明线程数不够;但如果 aqu-sz 已经压到 0.3 以下,再加线程无意义,还可能增加上下文切换开销
  • innodb_adaptive_flushing 必须保持 ON(默认),关掉后无法根据 redo log 增长速率动态调节刷页节奏,大事务后必出尖峰

innodb_flush_method=O_DIRECT 为什么不能省

这是最容易被跳过的一步,但后果严重。

默认的 fdatasync 模式下,InnoDB 写页会先进 OS page cache,再由内核刷盘,形成 double buffering:既占内存又加重 IO。而 O_DIRECT 绕过 page cache,让 InnoDB 直接与磁盘对话。

  • 好处:降低内存压力、避免 cache 污染、减少 writeback 延迟抖动
  • 前提:文件系统必须支持(XFS/ext4 都行),且存储设备要有断电保护(BBU/FBWC 或 UPS),否则禁用 barrier 可能丢数据
  • 验证方式:改完重启 mysqld,再跑 iostat -x 1,观察 wkB/s 是否更平稳、w_await 波动是否收窄

真正卡在 IO 的时候,很多人反复调 buffer pool 或索引,却忘了这行配置——它不解决逻辑问题,但决定了底层 IO 路径是否干净。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

mysql

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

2023.06.20

1993

6

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

2023.06.21

1239

5

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.18

715

5

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.19

2632

5

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.25

4348

4

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2023.08.08

1019

3

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.11

4611

4

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

2023.08.14

4142

7

mysql事务隔离级别
mysql事务隔离级别

mysql规范中定义了四种事务隔离级别,不同的隔离级别对事务的处理有所不同。本专题为大家提供mysql事务隔离级别相关的文章内容,大家可以免费体验。

2023.08.16

5354

11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 176人学习

使用phpenv集成环境安装极致CMS
使用phpenv集成环境安装极致CMS

共2课时 | 279人学习