Sysbench 性能压测

参考

合成自:http://linuxperformance.top/index.php/archives/83/

            https://blog.csdn.net/notbaron/article/details/77413379

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

sysbench是一款开源的多线程性能测试工具,可以执行CPU/内存/线程/IO/数据库等方面的性能测试。

sysbench支持以下几种测试模式:

1、CPU运算性能
2、磁盘IO性能
3、调度程序性能
4、内存分配及传输速度
5、POSIX线程性能
6、数据库性能(OLTP基准测试)

 

下载地址及安装(Linux)

     下载地址:https://github.com/akopytov/sysbench

安装

 


 
  1. (1)下载解压

  2. wget https://github.com/akopytov/sysbench/archive/1.0.zip -O "sysbench-1.0.zip"

  3. unzip sysbench-1.0.zip

  4. cd sysbench-1.0

  5. (2)安装依赖

  6. yum install automake libtool –y

  7. (3)安装

  8. 安装之前,确保位于之前解压的sysbench目录中。

  9.  
  10. ./autogen.sh

  11. ./configure

  12. export LD_LIBRARY_PATH=/usr/local/mysql/include #这里换成机器中mysql路径下的include

  13. make

  14. make install

  15. (4)安装成功

  16. [root@test sysbench-1.0]# sysbench --version

  17. sysbench 1.0.9

     如果出现:configure: error: mysql_config executable not found
     需要安装:mariadb-devel (yum install mariadb-devel 安装mysql_config)

PS:此外可能还要安装mariadb-server包,yum install mariadb-server。

 

1、CPU测试

     对CPU的性能测试通常有:1.质数计算;2圆周率计算;sysbench使用的就是通过质数相加的测试。对CPU测试直接运行run即可


 
  1. sysbench --threads=20 --events=10000 --debug=on --test=cpu --cpu-max-prime=20000 run

  2. 20个线程执行1万条请求,每个请求执行质数相加到20000   

 

2、内存测试


 
  1. 测试8K顺序分配:

  2. sysbench --threads=12 --events=10000 --test=memory --memory-block-size=8K --memory-total-size=100G --memory-access-mode=seq run

  3. 测试8K随机分配。

  4. sysbench --threads=12 --events=10000 --test=memory --memory-block-size=8K --memory-total-size=100G --memory-access-mode=rnd run

  5.  

 

3、文件io测试


 
  1. IO的测试主要用于测试IO的负载性能。主要测试选项为--file-test-mode。还有可以关注的参数包括--file-block-size、--file-io-mode、--file-fsync-freq 、--file-rw-ratio,具体参数含义请见参数解释章节。

  2. sysbench --threads=12 --events=10000 fileio --file-total-size=3G --file-test-mode=rndrw prepare

  3. sysbench --threads=12 --events=10000 fileio --file-total-size=3G --file-test-mode=rndrw run

  4. sysbench --threads=12 --events=10000 fileio --file-total-size=3G --file-test-mode=rndrw cleanup

  5. 对比两台服务器的io性能,需要跑相同的线程

 

4、锁测试


 
  1. 互斥锁测试模拟所有线程在同一时刻并发运行。

  2. sysbench --threads=12 mutex --mutex-num=1024 --mutex-locks=10000 --mutex-loops=10000 run

 

5、线程测试

sysbench threads --num-threads=64 --thread-yields=100 --thread-locks=2 run

 

6、OLTP测试

     oltp是针对数据库的基准测试,例如每次对数据库进行优化后执行基准测试来测试不同的配置的tps。sysbench 0.5之后通过一系列LUA脚本来替换之前的oltp,来模拟更接近真实的基准测试环境。这些测试脚本包含:insert.lua、oltp.lua、parallel_prepare.lua、select_random_points.lua、update_index.lua、delete.lua oltp_simple.lua、select.lua、select_random_ranges.lua、update_non_index.lua


 
  1. 预置条件:

  2. a)创建数据库:

  3. mysqladmin create sbtest -uroot –p

  4. 或者

  5. SQL>create database sbtest

  6. b)增加权限:

  7. grant usage on . to 'sbtest'@'%' identified by password '*2AFD99E79E4AA23DE141540F4179F64FFB3AC521';

  8. 其中密码通过如下命令获取:

  9. select password('sbtest');

  10. +-------------------------------------------+

  11. | password('sbtest') |

  12. +-------------------------------------------+

  13. | 2AFD99E79E4AA23DE141540F4179F64FFB3AC521 |

  14. +-------------------------------------------+

  15. 1 row in set (0.00 sec)

  16. c)增加权限:

  17. GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER,INDEX ON sbtest.TO 'sbtest'@"%";

  18. grant all privileges on . to 'sbtest'@'%';

  19. flush privileges;

  20. 或者简单粗暴:

  21. create user 'sbtest'@'127.0.0.1' identified by 'sbtest';

  22. grant all privileges on . to

  23. flush privileges;

  24. e)OLTP测试:

  25. 准备阶段:

  26. sysbench --test= /usr/local/share/sysbench/tests/include/oltp_legacy/oltp.lua --oltp-table-size=10000 --mysql-table-engine=innodb --oltp-tables-count=10 --mysql-user=sbtest --mysql-password=sbtest --mysql-port=3306 --mysql-host=127.0.0.1 --max-requests=0 --time=10 --report-interval=1 --threads=10 --oltp-point-selects=1 --oltp-simple-ranges=0 --oltp_sum_ranges=0 --oltp_order_ranges=0 --oltp_distinct_ranges=0 --oltp-read-only=on prepare

  27. 测试阶段:

  28. 命令如下:

  29. sysbench --test= /usr/local/share/sysbench/tests/include/oltp_legacy/oltp.lua --oltp-table-size=10000 --mysql-table-engine=innodb --oltp-tables-count=10 --mysql-user=sbtest --mysql-password=sbtest --mysql-port=3306 --mysql-host=127.0.0.1 --max-requests=0 --time=10 --report-interval=1 --threads=10 --oltp-point-selects=1 --oltp-simple-ranges=0 --oltp_sum_ranges=0 --oltp_order_ranges=0 --oltp_distinct_ranges=0 --oltp-read-only=on run

  30. 清理阶段:

  31. sysbench --test= /usr/local/share/sysbench/tests/include/oltp_legacy/oltp.lua --oltp-table-size=10000 --mysql-table-engine=innodb --oltp-tables-count=10 --mysql-user=sbtest --mysql-password=sbtest --mysql-port=3306 --mysql-host=127.0.0.1 --max-requests=0 --time=10 --report-interval=1 --threads=10 --oltp-point-selects=1 --oltp-simple-ranges=0 --oltp_sum_ranges=0 --oltp_order_ranges=0 --oltp_distinct_ranges=0 --oltp-read-only=on cleanup

  32. 最后删除数据库

  33. SQL>drop database sbtest;

 

完整实例:

1)、准备数据


 
  1. 执行模式为complex,使用了10个表,每个表有10万条数据,客户端的并发线程数为10,执行时间为120秒,每10秒生成一次报告。

  2. sysbench ./tests/include/oltp_legacy/oltp.lua --mysql-host=192.168.10.10 --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 prepare

2)、执行测试


 
  1. //将测试结果导出到文件中,便于后续分析

  2. sysbench ./tests/include/oltp_legacy/oltp.lua --mysql-host=192.168.10.10 --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

3)、清理数据


 
  1. //执行完测试后,清理数据,否则后面的测试会受到影响

  2. sysbench ./tests/include/oltp_legacy/oltp.lua --mysql-host=192.168.10.10 --mysql-port=3306 --mysql-user=root --mysql-password=123456 cleanup

4)、测试结果

其中,对于我们比较重要的信息包括:

queries:查询总数及qps

transactions:事务总数及tps

Latency-95th percentile:前95%的请求的最大响应时间,本例中是344毫秒,这个延迟非常大,是因为我用的MySQL服务器性能很差;在正式环境中这个数值是绝对不能接受的。

 

语法 sysbench [options]... [testname] [command]

1)、执行sysbench –help,可以看到sysbench的详细使用方法。

2)、command,要执行的命令,包括prepare、run和cleanup,顾名思义,prepare是为测试提前准备数据,run是执行正式的测试,cleanup是在测试完成后对数据库进行清理。

3)、testname指定了要进行的测试,在老版本的sysbench中,可以通过--test参数指定测试的脚本;而在新版本中,--test参数已经声明为废弃,可以不使用--test,而是直接指定脚本。

4)、options:sysbench的参数有很多,其中比较常用的包括:

 

7、参数解释


 
  1. 通过命令sysbench –help可以了解各参数的具体解释

  2. --test=tests/db/oltp.lua 表示调用 tests/db/oltp.lua 脚本进行 oltp 模式测试

  3. --threads:客户端的并发连接数

  4. --time:测试执行的时间,单位是秒,该值不要太短,可以选择120

  5. --report-interval:生成报告的时间间隔,单位是秒,如10

  6. --oltp_tables_count=10 表示会生成 10 个测试表

  7. --oltp-table-size=100000 表示每个测试表填充数据量为 100000

  8. --mysql-engine-trx=STRING指定不同的存储引擎测试。

  9. --oltp-test-mode=STRING测试类型:simple(简单select测试),complex(事务测试),nontrx(非事务测试),sp(存储过程) ;默认complex

  10. --oltp-sp-name=STRING指定存储过程进行语句测试

  11. --oltp-table-size=N指定表的记录大小,默认[10000]

  12. --oltp-num-tables=N指定测试表的数量,默认1

  13. --rand-init=on 表示每个测试表都是用随机数据来填充的

  14. --file-num=N创建测试文件的数量,默认128个

  15. --file-block-size=N block size大小,默认16K

  16. --file-total-size=SIZE所有文件的总大小,默认2G

  17. --file-test-mode=STRING测试类型 {seqwr(顺序写), seqrewr(顺序读写), seqrd(顺序读), rndrd(随机读), rndwr(随机写), rndrw(随机读写)} --file-io-mode=STRING I/O模式,需要系统支持默认sync[sync(同步IO),async(异步IO),mmap()]

  18. --file-async-backlog=N每个线程的异步操作队列数,默认128个,需要--file-io-mode=async;

  19. --file-extra-flags=STRING additional flags to use on opening files {sync,dsync,direct} []

  20. --file-fsync-freq=N当请求数达到多少时执行fsync()刷新,默认100,0代表过程中不执行fsync()

  21. --file-fsync-all=[on|off] 执行每一个写操作后执行fsync()刷新操作,默认关闭off --file-fsync-end=[on|off] 测试结束执行fsync()操作,默认开启on --file-fsync-mode=STRING 同步刷新方法,默认fsync {fsync, fdatasync} --file-merged-requests=N合并指定数量的IO请求,0代表不合并,默认0 --file-rw-ratio=N 读写比例,默认1.5/1

 

8、建议、注意

建议:

1)、在开始测试之前,应该首先明确:应采用针对整个系统的基准测试,还是针对MySQL的基准测试,还是二者都需要。

2)、如果需要针对MySQL的基准测试,那么还需要明确精度方面的要求:是否需要使用生产环境的真实数据,还是使用工具生成也可以;前者实施起来更加繁琐。如果要使用真实数据,尽量使用全部数据,而不是部分数据。

3)、要进行多次才有意义。需要注意主从同步的状态。测试必须模拟多线程的情况,单线程情况不但无法模拟真实的效率,也无法模拟阻塞甚至死锁情况。

注意:

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

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

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

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

 

谢谢分享:

合成自:http://linuxperformance.top/index.php/archives/83/

            https://blog.csdn.net/notbaron/article/details/77413379

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章