Plainnotes

测磁盘性能,别只跑一个 fio 数字

2025-01-17 · 3 分钟系统

买机器时看到“磁盘 500MB/s”,实际跑数据库卡得不行。因为那个数字多半是顺序读,而数据库关心的是随机小 IO 的 IOPS。

至少测四种:

fio --name=seqread  --rw=read      --bs=1M   --size=1G --numjobs=1
fio --name=seqwrite --rw=write     --bs=1M   --size=1G --numjobs=1
fio --name=randread --rw=randread  --bs=4k   --iodepth=32 --numjobs=4
fio --name=randwrite --rw=randwrite --bs=4k  --iodepth=32 --numjobs=4

云盘的另一个特点是突发额度:前几分钟能跑满,之后掉到基线。所以测试要跑够时间(比如 10 分钟),看稳态而不是峰值。

还有 fsync 的影响:加 --fsync=1 测的是带持久化的写,比 page cache 慢一个数量级,这才是数据库实际感受到的。