在《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狂飙),性能瓶颈是如何引起的,任重而道远。