mysql基准测试与sysbench使用

什么是基准测试?

基准测试是针对系统设计的一种压力测试。他的操作简单,直接,易于测试,数据可由工具生成,数据为测试数据。而压力测试一般考虑业务逻辑(例如购物车业务),要求需要真实的数据。主要作用于对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

  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)如果连续进行多次测试,注意确保之前测试的数据已经被清理干净。

  • 第一步准备测试数据
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

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

#报告内容如下:
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

猜你喜欢

转载自blog.csdn.net/Yoga0301/article/details/80960516