背景
在多次的MySQL性能测试中发现系统的IO能力不稳定,tp999响应时间在1ms到50ms之间波动。特别是在长期写入后,波动幅度更大,频率更高。为了排除MySQL软件本身引入的抖动,需要探索新的观测手段与测试方法
方法
工具监控tp999响应时间
最理想的方法是有一款工具,可以直接观察tp999线。基于4.1以上的Linux内核的确可以做到,比如biolatency。但是,公司内操作系统版本是Centos6,其只可以提供的磁盘的平均响应时间,无法查看tp999线。所以此路不通。
sysbench模拟IO负载
sysbench不仅仅可以测试MySQL的性能,其也可以测试CPU、IO性能。更重要的是其可以输出平均响应时间之外的数据。
包含最大值、最小值、平均值、999线等。
注:官方版本sysbench只支持观察0-99线,如需观察999线,需要做些改造
测试
场景
线上真实的业务流量经过数据库到达磁盘是28~32M/s,分布到各个部分分别为:
模式 | 速率 | 线程数 | |
---|---|---|---|
binlog | 顺序 | ~6M/s(稳定) | 1 |
redolog | 顺序 | ~6M/s(稳定) | 1 |
double write | 顺序 | 8M/s左右(动态变化) | 1 |
数据表文件 | 随机 | 8M/s左右(动态变化) | 4(innodb_page_cleaners) |
模拟
顺序写
/usr/local/bin/sysbench --test=fileio --file-total-size=200G --file-test-mode=seqwr --percentile=99.9 --max-time=10000 --max-requests=0 --report-interval=60 --num-threads=3 --rate=6000 run
随机写
/usr/local/bin/sysbench --test=fileio --file-total-size=200G --file-test-mode=rndwr --percentile=99.9 --max-time=10000 --max-requests=0 --report-interval=60 --num-threads=4 --rate=2000 run
结果
观察顺序写入的响应时间