用 lsof -p $(pgrep mysqld) 查看 mysqld 打开的文件,重点关注 reg 类型且处于 del 或 w 状态的条目,结合 iostat -x 1 定位高 io 文件;innodb_buffer_pool_read_requests 是逻辑读,不反映真实磁盘 io。

怎么看 MySQL 进程实际在读写哪些文件
MySQL 本身不直接暴露每个查询对应的磁盘 IO 文件路径,但真正造成磁盘压力的往往是 ibdata1、ib_logfile0、表空间文件(如 test/t1.ibd)和二进制日志(mysql-bin.000001)。要定位具体文件,得绕过 MySQL,看 OS 层面的进程行为。
实操建议:
- 用
lsof -p $(pgrep mysqld)查看 mysqld 进程打开的所有文件,重点关注REG类型且处于DEL或W状态的条目——这些是正在被写入的活跃数据/日志文件 - 配合
iostat -x 1观察%util和await,再比对lsof输出里高频出现的文件路径,能快速圈定瓶颈文件 - 注意:如果启用了
innodb_file_per_table=OFF,所有表数据都挤在ibdata1里,这时单个文件的 IO 就代表整个 InnoDB 引擎的写压力,没法按表拆分归因
为什么 show global status like 'Innodb_buffer_pool_read_requests' 不反映真实磁盘 IO
这个指标统计的是逻辑读请求次数,不是物理 IO。只要数据在 buffer pool 里命中,就不会触发磁盘读;它高只说明访问频繁,不代表磁盘忙。
真正体现磁盘读压力的是 Innodb_buffer_pool_reads(从磁盘读取页的次数),而写压力要看 Innodb_data_writes 和 Innodb_log_writes。
实操建议:
- 计算缓存命中率用:
Innodb_buffer_pool_read_requests / (Innodb_buffer_pool_read_requests + Innodb_buffer_pool_reads),低于 99% 就该怀疑 buffer pool 不够或有大范围扫描 -
Innodb_data_writes每秒超过 500–1000,结合iostat的w/s值明显偏高,基本可确认写 IO 是瓶颈 - 别盯着
Created_tmp_disk_tables——它反映的是临时表落盘,和存储引擎 IO 无直接关系,容易误判
用 pt-diskstats 监控时为什么/dev/nvme0n1 和 /dev/nvme0n1p1 数值差很多
这是设备层级差异导致的。MySQL 写的是文件系统路径(如 /var/lib/mysql/),而 pt-diskstats 默认统计的是底层块设备。如果用 LVM、加密卷或分区挂载,必须指定正确的设备名,否则数据完全对不上。
实操建议:
- 先用
df -h /var/lib/mysql找到挂载点对应的实际设备,再用lsblk看清它是裸盘(nvme0n1)、分区(nvme0n1p1)还是 LVM 逻辑卷(如dm-0) - 运行
pt-diskstats --devices /dev/nvme0n1p1,而不是默认全盘扫——否则 NVMe 控制器级的合并 IO 会被重复计数 - SSD 上
avgqu-sz长期 > 2 且await> 10ms,基本说明队列深度压满,IO 请求在排队,这时看 MySQL 的innodb_io_capacity是否远低于磁盘实际能力(比如 NVMe 却设成 200)
监控脚本里要不要采集 information_schema.INNODB_METRICS 表
要,但不能只采。这张表提供更细粒度的 IO 统计(如 log_writes、buffer_pool_reads),但它默认关闭多数模块,且部分指标有采样延迟或仅累计不重置。
实操建议:
- 启用关键模块:
SET GLOBAL innodb_monitor_enable = 'log,buffer_page';,避免开table_io这种高开销项 - 不要轮询
INNODB_METRICS频率高于每 10 秒一次——锁表风险低,但会增加内部 mutex 争用 - 优先用
SHOW ENGINE INNODB STATUS\G中的FILE I/O段做瞬时诊断,它比INNODB_METRICS更实时,尤其适合查突发 IO 卡顿
磁盘 IO 监控最麻烦的从来不是“看不到”,而是看到一堆数字后分不清哪一层在拖慢——MySQL 层、文件系统层、块设备层、甚至 NVMe 固件层,每一层都可能吃掉几毫秒。盯住 iostat 的 svctm(已废弃但仍有参考价值)和 await 的差值,比单纯看 QPS 或缓冲池命中率更能暴露真实瓶颈。











