测磁盘性能,别只跑一个 fio 数字
买机器时看到“磁盘 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 慢一个数量级,这才是数据库实际感受到的。