什么是基准测试?
基准测试是针对系统设计的一种压力测试。他的操作简单,直接,易于测试,数据可由工具生成,数据为测试数据。而压力测试一般考虑业务逻辑(例如购物车业务),要求需要真实的数据。主要作用于对mysql参数修改后的性能变化以及硬件配置更换测试性能。
基准测试详解可以查看这篇文章:什么是基准测试
sysbench简介
- cpu性能
- 磁盘io性能
- 调度程序性能
- 内存分配以及传输速度
- POSIX线程性能
- 数据库性能(OLTP基准测试)
安装
安装系统环境是centos7.4
(1)下载解压
wget https://github.com/akopytov/sysbench/archive/1.0.zip -O "sysbench-1.0.zip"
unzip sysbench-1.0.zip
cd sysbench-1.0
(2)安装依赖
yum install automake libtool –y
(3)安装
./autogen.sh
./configure
export LD_LIBRARY_PATH=/usr/local/mysql/lib #这里换成机器中mysql路径下的lib
make
make install
(4)安装成功
[root@test sysbench-1.0]# sysbench --version
sysbench 1.0.9
(5) 创建初始化数据库sbtest
mysqladmin create sbtest -uroot -p
sysbench语法
基本语法如下:
sysbench [options]… [testname] [command]
1. options
连接mysql的参数以及执行信息的配置参数。
连接mysql的参数
- mysql-host:MySQL服务器主机名,默认localhost;如果在本机上使用localhost报错,提示无法连接MySQL服务器,改成本机的IP地址应该就可以了。
- mysql-port:MySQL服务器端口,默认3306
- mysql-user:用户名
- mysql-password:密码
执行信息的配置参数
- oltp-test-mode:执行模式,包括simple、nontrx和complex,默认是complex。simple模式下只测试简单的查询;nontrx不仅测试查询,还测试插入更新等,但是不使用事务;complex模式下测试最全面,会测试增删改查,而且会使用事务。可以根据自己的需要选择测试模式。
- oltp-tables-count:测试的表数量,根据实际情况选择
- oltp-table-size:测试的表的大小,根据实际情况选择
- threads:客户端的并发连接数
- time:测试执行的时间,单位是秒,该值不要太短,可以选择120
- report-interval:生成报告的时间间隔,单位是秒,如10
testname
需要执行的脚本名。大多数自带的脚本已经足够了。如果有需要也可以自己开发。自带的脚本在src/lua目录下。
command
要执行的命令。包括prepare(提前准备数据),run(执行正式的测试),cleanup(清除测试的数据)。
sysbench使用
在执行sysbench时,应该注意:
(1)尽量不要在MySQL服务器运行的机器上进行测试,一方面可能无法体现网络(哪怕是局域网)的影响,另一方面,sysbench的运行(尤其是设置的并发数较高时)会影响MySQL服务器的表现。
(2)可以逐步增加客户端的并发连接数(–thread参数),观察在连接数不同情况下,MySQL服务器的表现;如分别设置为10,20,50,100等。
(3)一般执行模式选择complex即可,如果需要特别测试服务器只读性能,或不使用事务时的性能,可以选择simple模式或nontrx模式。
(4)如果连续进行多次测试,注意确保之前测试的数据已经被清理干净。
- 第一步准备测试数据
sysbench ./tests/include/oltp_legacy/oltp.lua --mysql-host=localhost --mysql-port=3306 --mysql-user=root --mysql-password=123456 --oltp-test-mode=complex --oltp-tables-count=10 --oltp-table-size=10000 --threads=10 --time=120 --report-interval=10 prepare
说明一下该语句所代表的意思,创建10个表格,每个表中有1万条数据,线程数量为10,时间为120秒,每10秒生成一次报告。
- 第二步运行测试并导出到文件中
sysbench ./tests/include/oltp_legacy/oltp.lua --mysql-host=localhost --mysql-port=3306 --mysql-user=root --mysql-password=123456 --oltp-test-mode=complex --oltp-tables-count=10 --oltp-table-size=100000 --threads=10 --time=120 --report-interval=10 run >> /home/test/mysysbench.log
查看导出文件内容
#报告内容如下:
Running the test with following options:
Number of threads: 20
Initializing random number generator from current time
Initializing worker threads...
Threads started!
OLTP test statistics:
queries performed:
read: 935592 --读总数
write: 267295 --写总数
other: 133650 --其他操作(CURD之外的操作,例如COMMIT)
total: 1336537 --全部总数
transactions: 66822 (556.77 per sec.) --总事务数(每秒事务数)
read/write requests: 1202887 (10022.55 per sec.) --读写总数(每秒读写次数)
other operations: 133650 (1113.58 per sec.) --其他操作总数(每秒其他操作次数)
ignored errors: 6 (0.05 per sec.) --总忽略错误总数(每秒忽略错误次数)
reconnects: 0 (0.00 per sec.) --重连总数(每秒重连次数)
General statistics: --常规统计
total time: 120.0180s --总耗时
total number of events: 66822 --共发生多少事务数
total time taken by event execution: 2399.7900s --所有事务耗时相加(不考虑并行因素)
response time:
min: 2.76ms --最小耗时
avg: 35.91ms --平均耗时
max: 1435.19ms --最长耗时
approx. 95 percentile: 84.22ms --超过95%平均耗时
Threads fairness: --并发统计
events (avg/stddev): 3341.1000/37.54 --总处理事件数/标准偏差
execution time (avg/stddev): 119.9895/0.02
--总执行时间/标准偏差
- 第三步清理数据
sysbench ./tests/include/oltp_legacy/oltp.lua --mysql-host=localhost --mysql-port=3306 --mysql-user=root --mysql-password=123456 --oltp-tables-count=10 cleanup
总结
sysbench如果测试数据库性能时,缺点是在于测试出来的情况未必是真实的。因为采用的是prepare生成的测试数据。所以一般作用于对mysql参数修改后的性能变化以及更换硬件配置后性能测试。
扩展
如果你想测试结果的数据更加的清晰明了,而不是一些数字。那么可以采用gnuplot绘图方式展示。建议至少熟悉sysbench,且尽早的使用gnuplot绘图方式发现系统中的问题和错误。
参考文献
https://www.cnblogs.com/kismetv/archive/2017/09/30/7615738.html