背景说明
最近一直在讨论关于MySQL的优化问题,谈论到了关于文件系统的话题,由于历史原因,线上机器的部署虽然使用的是centos7,但是文件系统并没有使用默认的xfs,而是使用的ext4,原因是ext4相对于xfs更稳定一些,所以当时选择了ext4。在决定是否需要切回到xfs之前,先做了两者的比较。
说明:不做压测,只做数据结果对比,观察EXT4和XFS文件系统对文件I/O操作和MySQL场景下的性能表现差异。
文件系统读写逻辑和流程
- 文件系统读操作
- 文件系统写操作
环境准备
OS版本:centos7.6
kernel版本:3.10.0-957.el7.x86_64
磁盘:NVMe SSD U.2 3.2T
mount参数:defaults
MySQL版本:5.7.29
工具:sysbench 1.1.0
测试过程
说明:全部测试只采用sysbench工具,测试数据盘NVMe SSD,挂载目录/ssd,挂载选项默认defaults,未对挂载参数做优化(atime,barrier),结果影响不大。
1、格式化ext4,并挂载
mkfs.ext4 /dev/nvme0n1
mount /dev/nvme0n1 /ssd
2、测试文件I/O,分别测试顺序读,顺序写,随机读,随机写和随机读写,测试文件块大小为4k,16k,64k,128k和512k,每种场景测试10分钟,测试过程中注意清除缓存,记录数据,并观察CPU和磁盘利用率。
sysbench fileio --file-num=1 --file-total-size=500G --file-block-size=4k --file-test-mode=seqrd --file-io-mode=sync --file-extra-flags=direct
sysbench fileio --file-num=1 --file-total-size=500G --file-block-size=4k --file-test-mode=seqwr --file-io-mode=sync --file-extra-flags=direct
sysbench fileio --file-num=1 --file-total-size=500G --file-block-size=4k --file-test-mode=rndrd --file-io-mode=sync --file-extra-flags=direct
sysbench fileio --file-num=1 --file-total-size=500G --file-block-size=4k --file-test-mode=rndwr --file-io-mode=sync --file-extra-flags=direct
sysbench fileio --file-num=1 --file-total-size=500G --file-block-size=4k --file-test-mode=rndrw --file-io-mode=sync --file-extra-flags=direct
3、测试数据库MySQL的查询,插入,更新和读写操作,测试并发数12、24、36、48、60,测试数据库大小100000记录,每种场景测试10分钟,测试过程中注意清除缓存,记录数据,并观察CPU和磁盘利用率。
sysbench /tmp/test/sysbench-master/src/lua/oltp_point_select.lua --tables=1 --table_size=100000 --threads=12
sysbench /tmp/test/sysbench-master/src/lua/oltp_insert.lua --tables=1 --table_size=100000 --threads=12
sysbench /tmp/test/sysbench-master/src/lua/oltp_update_index.lua --tables=1 --table_size=100000--threads=12
sysbench /tmp/test/sysbench-master/src/lua/oltp_read_write.lua --tables=1 --table_size=100000 --threads=12
4、重新格式化xfs,并挂载
mkfs.xfs /dev/nvme0n1
mount /dev/nvme0n1 /ssd
5、重复2和3
测试结果
文件I/O测试
MySQL场景测试
测试结论
1、ext4和xfs没有孰强孰弱之分,性能几乎一致
2、在数据库场景下,读有3%左右的提升,但是在写方面没有明显优势
3、xfs相比ext4而言,磁盘io利用率低。文件I/O时CPU利用率xfs要高一些,数据库场景下CPU利用率ext4要高一些
4、综上,没有做替换的必要
参考文档
https://github.com/kernel-z/filesystem
https://github.com/akopytov/sysbench