大数跨境
0
0

MySQL 场景专项 FIO 压测案例

MySQL 场景专项 FIO 压测案例 Linux运维技术之路
2025-08-29
4
导读:MySQL 场景专项 FIO 压测案例数据库尤其是 MySQL(InnoDB 引擎)对 磁盘 IO 的依赖

 










 

MySQL 场景专项 FIO 压测案例

数据库尤其是 MySQL(InnoDB 引擎)对 磁盘 IO 的依赖极强。
它的典型特点是:

  • • 4KB 随机读写(对应 InnoDB 页大小)
  • • 高并发小 IO(事务并发提交)
  • • WAL(redo log)顺序写 + 数据页随机读写

因此,如果要用 fio 模拟 MySQL 的场景,可以这样测试:


1️⃣ 随机 4KB 读写(核心场景)

fio --name=mysql-randrw \
    --filename=/data/mysql_testfile \
    --size=2G \
    --bs=4k \
    --rw=randrw \
    --rwmixread=70 \
    --ioengine=libaio \
    --iodepth=64 \
    --numjobs=8 \
    --runtime=300 \
    --time_based \
    --direct=1 \
    --group_reporting

参数说明:

  • • --bs=4k :块大小 4KB,模拟 InnoDB 页
  • • --rw=randrw :随机读写混合
  • • --rwmixread=70 :读占 70%,写占 30%,符合大多数 MySQL 读多写少的场景
  • • --iodepth=64 :队列深度,模拟并发事务
  • • --numjobs=8 :并发 8 个线程,模拟多连接访问
  • • --runtime=300 --time_based :持续跑 5 分钟,避免短时间波动

2️⃣ redo log 顺序写(事务提交场景)

fio --name=mysql-redolog \
    --filename=/data/mysql_redolog \
    --size=1G \
    --bs=512 \
    --rw=write \
    --ioengine=libaio \
    --iodepth=1 \
    --numjobs=4 \
    --runtime=300 \
    --time_based \
    --direct=1 \
    --group_reporting

参数说明:

  • • --bs=512 :InnoDB redo log 写入是 512B 对齐
  • • --rw=write :顺序写,模拟事务提交写日志
  • • --iodepth=1 :redo log 写入是低并发、顺序刷盘
  • • --numjobs=4 :多个线程模拟不同事务提交

3️⃣ 结果怎么看?

重点关注这几个指标:

  • • IOPS:代表数据库在这种场景下能支撑多少事务/查询
  • • clat(完成延迟):如果 > 10ms,数据库事务延迟会显著增加
  • • util=100%:表示磁盘被打满,业务再多 IO 也不会提升

4️⃣ 对 DBA 的意义

  • • 如果 随机 4KB IOPS < 5000,SSD 都不算合格,更别提跑数据库了。
  • • redo log 顺序写延迟太高,会导致 事务提交卡顿,影响整体 TPS。
  • • 通过 fio,你能 量化存储极限,做到心里有数,再决定是优化 SQL、调参,还是换存储。

📢 一句话总结:
用 fio 跑 MySQL 专属场景,可以提前知道数据库瓶颈,避免“数据库背锅”,而是精准判断问题出在存储还是 SQL!

 




 

 


往期回顾


【声明】内容源于网络
0
0
Linux运维技术之路
专注运维架构、高可用、高并发、高性能、大数据、容器化、数据库、python、devops等开源技术和实践的分享。
内容 347
粉丝 0
Linux运维技术之路 专注运维架构、高可用、高并发、高性能、大数据、容器化、数据库、python、devops等开源技术和实践的分享。
总阅读790
粉丝0
内容347