理性理解mysql基准测试工具sysbench

语言: CN / TW / HK

《mysql压力基准工具sysbench初探》 一文中简单了解了sysbench,经过进一步调研,深刻明白做一个基准测试很不容易。

进一步理解

sysbench不仅仅测试mysql,和mysql性能有关的还包括硬件(cpu、memory、disk),但由于目前所有的服务均部署在阿里云,所以硬件选择并没有太多的选择,基准测试主要用于参数调整了。

sysbench新版本的使用方法已经有了非常大的变化,参数也很多,手册上描述的并不全面,幸亏基准测试的很多用例都是lua语言写的,所以有些参数最好直接看lua源码。

数据集的大小对于测试也有影响,另外sysbench不应该和mysqld在同一台机器上测试。

sysbench有一些关键的参数,再一次说明:

  • —oltp_tables_count=10,表示初始化10张表

  • —table-size=10000000,控制每张表大小

  • —db-ps-mode=disable,表示禁止预定义的语句

  • —rand-type=special,表示不同的数据分布

  • —oltp_read_only=on,表示只读测试

  • —oltp_write_only=on,表示只写测试

  • —warmup_time=3,数据预热时间,更好的测试

  • —histogram=on,响应时间的分布图

  • —rate,限制每秒的qps,做更真实的测试

测试用例

sysbench /usr/share/sysbench/tests/include/oltp_legacy/oltp.lua --db-driver=mysql --mysql-db=test --mysql-user=--mysql-password='' --oltp-table-size=5000000  --oltp_tables_count=20 prepare

sysbench /usr/share/sysbench/tests/include/oltp_legacy/oltp.lua --db-driver=mysql --mysql-db=test --mysql-user=root --mysql-password='' --oltp-table-size=5000000  --oltp_tables_count=20  --report-interval=5 --histogram=on --db-ps-mode=disable --warmup_time=3  --oltp_read_only=on --time=60  --threads=10  run

sysbench /usr/share/sysbench/tests/include/oltp_legacy/oltp.lua --db-driver=mysql --mysql-db=test --mysql-user=root --mysql-password='' --oltp-table-size=5000000  --oltp_tables_count=20 cleanup

主要测试:

  • 参数优化前后,只读、只写测试

  • buffer 调整前后,综合测试

结论

1:参数调整前后,读的性能相差的幅度比写的幅度小的多,参数buffer过小,写的性能差异非常大。

(1)只读测试

(2)只写测试

2:buffer pool 从15G到30G(数据集大小20G),tps并没有增加,反而有一些衰减,这是让我觉得比较奇怪的,可能和机器上部署的mongodb有一定的关系,目前还没有想到原因。

sysbench的了解暂时告一段落,如果能够对于生产数据的真实调用进行测试就完美了,自己也要通过检测系统了解数据库压力的真实情况,已经为什么以前遇到过性能瓶颈(CPU狂飙),性能瓶颈是如何引起的,任重而道远。

分享到: