mysql基准测试与sysbench使用

什么是基准测试?

基准测试是针对系统设计的一种压力测试。他的操作简单,直接,易于测试,数据可由工具生成,数据为测试数据。而压力测试一般考虑业务逻辑(例如购物车业务),要求需要真实的数据。主要作用于对mysql参数修改后的性能变化以及硬件配置更换测试性能。
基准测试详解可以查看这篇文章:什么是基准测试

sysbench简介

  • cpu性能
  • 磁盘io性能
  • 调度程序性能
  • 内存分配以及传输速度
  • POSIX线程性能
  • 数据库性能(OLTP基准测试)

安装

安装系统环境是centos7.4

(1)下载解压

1
2
3
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)安装依赖

1
yum install automake libtool –y

(3)安装

1
2
3
4
5
./autogen.sh
./configure
export LD_LIBRARY_PATH=/usr/local/mysql/lib #这里换成机器中mysql路径下的lib
make
make install

(4)安装成功

1
2
[root@test sysbench-1.0]# sysbench --version
sysbench 1.0.9

(5) 创建初始化数据库sbtest

1
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
  1. testname
    需要执行的脚本名。大多数自带的脚本已经足够了。如果有需要也可以自己开发。自带的脚本在src/lua目录下。

    image

  2. command
    要执行的命令。包括prepare(提前准备数据),run(执行正式的测试),cleanup(清除测试的数据)。

sysbench使用

在执行sysbench时,应该注意:



(1)尽量不要在MySQL服务器运行的机器上进行测试,一方面可能无法体现网络(哪怕是局域网)的影响,另一方面,sysbench的运行(尤其是设置的并发数较高时)会影响MySQL服务器的表现。

(2)可以逐步增加客户端的并发连接数(–thread参数),观察在连接数不同情况下,MySQL服务器的表现;如分别设置为10,20,50,100等。

(3)一般执行模式选择complex即可,如果需要特别测试服务器只读性能,或不使用事务时的性能,可以选择simple模式或nontrx模式。

(4)如果连续进行多次测试,注意确保之前测试的数据已经被清理干净。

  • 第一步准备测试数据
1
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秒生成一次报告。

image

image

  • 第二步运行测试并导出到文件中
1
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

查看导出文件内容

image

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#报告内容如下:
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
--总执行时间/标准偏差
  • 第三步清理数据
1
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绘图方式发现系统中的问题和错误。gunplot进行绘图分析可参考这篇文章,sysbench对MySQL进行压力测试。与gunplot进行绘图分析

参考文献

https://www.cnblogs.com/kismetv/archive/2017/09/30/7615738.html


评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×