• 售前

  • 售后

热门帖子
入门百科

数据库性能测试之sysbench工具的安装与用法详解

[复制链接]
123457886 显示全部楼层 发表于 2021-10-26 13:21:33 |阅读模式 打印 上一主题 下一主题
目录


  • 1.简介和安装
  • 2.sysbench利用方法
  • 3.预备测试数据
  • 4.数据库测试和结果分析
  • 5.cpu/io/内存等测试

1.简介和安装

sysbench是一个开源的、模块化的、跨平台的多线程性能测试工具,可以用来举行CPU、内存、磁盘I/O、线程、数据库的性能测试。目前支持的数据库有MySQL、Oracle和PostgreSQL。
      
  • 官方站点:https://github.com/akopytov/sysbench/  
  • rpm包下载:https://packagecloud.io/akopytov/sysbench/packages/el/7/sysbench-1.0.15-1.el7.centos.x86_64.rpm  
  • 源码包下载:https://github.com/akopytov/sysbench/archive/1.0.15.tar.gz  
  • 本地下载:http://xiazai.jb51.net/201807/yuanma/sysbench_jb51.rar
如果是编译安装,必要先安装好mysql的开发包(只管编译错误时提示的是缺少Mysql库文件)。
  1. yum -y install mysql-community-devel
  2. tar xf 1.0.15.tar.gz
  3. cd sysbench-1.0.15
  4. ./autogen.sh
  5. ./configure
  6. make -j
  7. make install
复制代码
安装后,只有一个二进制文件sysbench,还提供了许多个lua脚本。
  1. [root@s1 ~]# rpm -ql sysbench | grep 'bin\|lua'
  2. /usr/bin/sysbench
  3. /usr/share/sysbench/bulk_insert.lua
  4. /usr/share/sysbench/oltp_common.lua
  5. /usr/share/sysbench/oltp_delete.lua
  6. /usr/share/sysbench/oltp_insert.lua
  7. /usr/share/sysbench/oltp_point_select.lua
  8. /usr/share/sysbench/oltp_read_only.lua
  9. /usr/share/sysbench/oltp_read_write.lua
  10. /usr/share/sysbench/oltp_update_index.lua
  11. /usr/share/sysbench/oltp_update_non_index.lua
  12. /usr/share/sysbench/oltp_write_only.lua
  13. /usr/share/sysbench/select_random_points.lua
  14. /usr/share/sysbench/select_random_ranges.lua
  15. /usr/share/sysbench/tests/include/inspect.lua
  16. /usr/share/sysbench/tests/include/oltp_legacy/bulk_insert.lua
  17. /usr/share/sysbench/tests/include/oltp_legacy/common.lua
  18. /usr/share/sysbench/tests/include/oltp_legacy/delete.lua
  19. /usr/share/sysbench/tests/include/oltp_legacy/insert.lua
  20. /usr/share/sysbench/tests/include/oltp_legacy/oltp.lua
  21. /usr/share/sysbench/tests/include/oltp_legacy/oltp_simple.lua
  22. /usr/share/sysbench/tests/include/oltp_legacy/parallel_prepare.lua
  23. /usr/share/sysbench/tests/include/oltp_legacy/select.lua
  24. /usr/share/sysbench/tests/include/oltp_legacy/select_random_points.lua
  25. /usr/share/sysbench/tests/include/oltp_legacy/select_random_ranges.lua
  26. /usr/share/sysbench/tests/include/oltp_legacy/update_index.lua
  27. /usr/share/sysbench/tests/include/oltp_legacy/update_non_index.lua
复制代码
本文先容的是新版本sysbench oltp lua脚本的用法(/usr/share/sysbench/*.lua),所以不涉及传统的lua(tests/include/oltp_legacy/*.lua),如果想要相识这些传统Lua脚本的用法,网上随便找。


2.sysbench利用方法

以下列出了sysbench对测试mysql时常用的选项。
  1. [root@xuexi ~]# sysbench --help
  2. Usage:
  3. sysbench [options]... [test_lua] [lua_options] [command]
  4. Commands implemented by most tests: prepare run cleanup help
复制代码
通用选项:以下中括号中的值表示默认值
  1.   --threads=N                     指定线程数[1]
  2.   --events=N                      限制最大请求数,0表示不限制[0]
  3.   --time=N                        限制最长执行时间,0表示不限制[10]
  4.                     --events和--time二者选一即可
  5.   --forced-shutdown=STRING        达到最长执行时间后还需等待多久关闭sysbench
  6.                                   off表示禁用该功能[off]
  7.   --thread-stack-size=SIZE        每个线程使用的栈空间大小[64K]
  8.   --rate=N                        平均事务处理速率,0表示不限制[0]
  9.   --report-interval=N             每隔几秒报告一次结果,0表示禁用间隔报告[0]
  10.   --config-file=FILENAME          从文件中读取命令行选项
  11.   --tx-rate=N                     已废弃,是--rate的别名[0]
  12.   --max-requests=N                已废弃,是--events的别名[0]
  13.   --max-time=N                    已废弃,是--time的别名[0]
  14.   --num-threads=N                 已废弃,是--threads的别名[1]
复制代码
mysql相关选项:
  1.   --mysql-host=[LIST,...]          MySQL server host [localhost]
  2.   --mysql-port=[LIST,...]          MySQL server port [3306]
  3.   --mysql-socket=[LIST,...]        MySQL socket
  4.   --mysql-user=STRING              MySQL user [sbtest]
  5.   --mysql-password=STRING          MySQL password []
  6.   --mysql-db=STRING                MySQL database name [sbtest]
  7.   --mysql-ignore-errors=[LIST,...] 要忽略的错误代码,值可为"all" [1213,1020,1205]
复制代码
  1. Compiled-in tests:
  2.   fileio - File I/O test
  3.   cpu - CPU performance test
  4.   memory - Memory functions speed test
  5.   threads - Threads subsystem performance test
  6.   mutex - Mutex performance test
复制代码
其中,command部门有4类:prepare run cleanup和help:

      
  • prepare:预备数据的下令。比方,在sysbench压力测试之前,必要先预备好测试库、测试表以及测试表中的数据。具体用法见后文。  
  • run:表示举行压力测试。  
  • cleanup:扫除测试时产生的数据。  
  • help:输出给定lua脚本的资助信息。
test_lua是想要利用的lua脚本,如果是rpm包安装的sysbench,则这些脚本都是/usr/share/sysbench目录下。对于一样平常的数据库测试,只需利用和oltp有关的lua脚本就富足。

options和lua_options是差别的,options是sysbench的选项,lua_options是lua脚本的选项,lua_options应该要放在test_lua的背面(非必须,但建议)。

比方,要查察oltp_common.lua的用法,可以:
  1. sysbench /usr/share/sysbench/oltp_common.lua help
复制代码
3.预备测试数据

起首创建sysbench所需数据库sbtest(这是sysbench默认利用的库名,必须创建测试库)。
  1. mysqladmin -h127.0.0.1 -uroot -pP@ssword1! -P3306 create sbtest;
复制代码
然后,预备测试所用的表,这些测试表放在测试库sbtest中。这里利用的lua脚本为/usr/share/sysbench/oltp_common.lua。
  1. sysbench --mysql-host=127.0.0.1 \
  2.    --mysql-port=3306 \
  3.    --mysql-user=root \
  4.    --mysql-password=P@ssword1! \
  5.    /usr/share/sysbench/oltp_common.lua \
  6.    --tables=10 \
  7.    --table_size=100000 \
  8.    prepare
复制代码
其中--tables=10表示创建10个测试表,--table_size=100000表示每个表中插入10W行数据,prepare表示这是预备数的过程。
  1. mysql> show tables from sbtest;
  2. +------------------+
  3. | Tables_in_sbtest |
  4. +------------------+
  5. | sbtest1   |
  6. | sbtest10   |
  7. | sbtest2   |
  8. | sbtest3   |
  9. | sbtest4   |
  10. | sbtest5   |
  11. | sbtest6   |
  12. | sbtest7   |
  13. | sbtest8   |
  14. | sbtest9   |
  15. +------------------+
  16. mysql> select count(*) from sbtest.sbtest1;
  17. +----------+
  18. | count(*) |
  19. +----------+
  20. | 100000 |
  21. +----------+
复制代码
如果想要扫除这10个表,可利用cleanup下令。
  1. sysbench --mysql-host=127.0.0.1 \
  2.    --mysql-port=3306 \
  3.    --mysql-user=root \
  4.    --mysql-password=P@ssword1! \
  5.    /usr/share/sysbench/oltp_common.lua \
  6.    --tables=10 \
  7.    cleanup
复制代码
4.数据库测试和结果分析

轻微修改下之前预备数据的语句,就可以拿来测试了。

必要留意的是,之前利用的lua脚本为oltp_common.lua,它是一个通用脚本,是被别的lua脚本调用的,它不能直接拿来测试。

所以,我这里用oltp_read_write.lua脚本来做读、写测试。还有许多别的范例的测试,比如只读测试、只写测试、删除测试、大批量插入测试等等。可找到对应的lua脚本举行调用即可。
  1. sysbench --threads=4 \
  2.    --time=20 \
  3.    --report-interval=5 \
  4.    --mysql-host=127.0.0.1 \
  5.    --mysql-port=3306 \
  6.    --mysql-user=root \
  7.    --mysql-password=P@ssword1! \
  8.    /usr/share/sysbench/oltp_read_write.lua \
  9.    --tables=10 \
  10.    --table_size=100000 \
  11.    run
复制代码
以下是测试返回的结果:
  1. Initializing worker threads...
  2. Threads started!
  3. ####以下是每5秒返回一次的结果,统计的指标包括:
  4. #### 线程数、tps(每秒事务数)、qps(每秒查询数)、
  5. #### 每秒的读/写/其它次数、延迟、每秒错误数、每秒重连次数
  6. [ 5s ] thds: 4 tps: 130.16 qps: 2606.30 (r/w/o: 1824.51/520.66/261.13) lat (ms,95%): 104.84 err/s: 0.00 reconn/s: 0.00
  7. [ 10s ] thds: 4 tps: 126.74 qps: 2539.17 (r/w/o: 1778.17/507.52/253.47) lat (ms,95%): 108.68 err/s: 0.00 reconn/s: 0.00
  8. [ 15s ] thds: 4 tps: 136.54 qps: 2736.34 (r/w/o: 1915.25/548.01/273.07) lat (ms,95%): 102.97 err/s: 0.00 reconn/s: 0.00
  9. [ 20s ] thds: 4 tps: 107.44 qps: 2148.65 (r/w/o: 1505.60/428.17/214.89) lat (ms,95%): 132.49 err/s: 0.00 reconn/s: 0.00
  10. SQL statistics:
  11.     queries performed:
  12.         read:          35098   # 执行的读操作数量
  13.         write:         10028   # 执行的写操作数量
  14.         other:         5014    # 执行的其它操作数量
  15.         total:         50140
  16.     transactions:      2507   (124.29 per sec.)    # 执行事务的平均速率
  17.     queries:           50140  (2485.82 per sec.)   # 平均每秒能执行多少次查询
  18.     ignored errors:    0      (0.00 per sec.)
  19.     reconnects:        0      (0.00 per sec.)
  20. General statistics:
  21.     total time:                  20.1694s     # 总消耗时间
  22.     total number of events:      2507         # 总请求数量(读、写、其它)
  23. Latency (ms):
  24.          min:                            2.32
  25.          avg:                           32.13
  26.          max:                          575.78
  27.          95th percentile:              118.92    # 采样计算的平均延迟
  28.          sum:                        80554.96
  29. Threads fairness:
  30.     events (avg/stddev):           626.7500/2.49
  31.     execution time (avg/stddev):   20.1387/0.04
复制代码
5.cpu/io/内存等测试

sysbench内置了几个测试指标。
  1. Compiled-in tests:
  2.   fileio - File I/O test
  3.   cpu - CPU performance test
  4.   memory - Memory functions speed test
  5.   threads - Threads subsystem performance test
  6.   mutex - Mutex performance test
复制代码
可直接help输出测试方法。比方,fileio测试。
  1. [root@xuexi ~]# sysbench fileio help
  2. sysbench 1.0.15 (using bundled LuaJIT 2.1.0-beta2)
  3. fileio options:
  4. --file-num=N     number of files to create [128]
  5. --file-block-size=N   block size to use in all IO operations [16384]
  6. --file-total-size=SIZE  total size of files to create [2G]
  7. --file-test-mode=STRING  test mode {seqwr, seqrewr, seqrd, rndrd, rndwr, rndrw}
  8. --file-io-mode=STRING   file operations mode {sync,async,mmap} [sync]
  9. --file-async-backlog=N  number of asynchronous operatons to queue per thread [128]
  10. --file-extra-flags=[LIST,...] list of additional flags to use to open files {sync,dsync,direct} []
  11. --file-fsync-freq=N   do fsync() after this number of requests (0 - don't use fsync()) [100]
  12. --file-fsync-all[=on|off]  do fsync() after each write operation [off]
  13. --file-fsync-end[=on|off]  do fsync() at the end of test [on]
  14. --file-fsync-mode=STRING  which method to use for synchronization {fsync, fdatasync} [fsync]
  15. --file-merged-requests=N  merge at most this number of IO requests if possible (0 - don't merge) [0]
  16. --file-rw-ratio=N    reads/writes ratio for combined test [1.5]
复制代码
比方,创建5个文件,统共1G,每个文件大概200M。
  1. sysbench fileio --file-num=5 --file-total-size=1G prepare
  2. [root@xuexi ~]# ls -lh test*
  3. -rw------- 1 root root 205M Jul 8 12:15 test_file.0
  4. -rw------- 1 root root 205M Jul 8 12:15 test_file.1
  5. -rw------- 1 root root 205M Jul 8 12:15 test_file.2
  6. -rw------- 1 root root 205M Jul 8 12:15 test_file.3
  7. -rw------- 1 root root 205M Jul 8 12:15 test_file.4
复制代码
然后,运行测试。
  1. sysbench --events=5000 \
  2.    --threads=16 \
  3.    fileio \
  4.    --file-num=5 \
  5.    --file-total-size=G \
  6.    --file-test-mode=rndrw \
  7.    --file-fsync-freq=0 \
  8.    --file-block-size=16384 \
  9.    run
复制代码
结果:
  1. File operations:
  2.     reads/s:                      98.67
  3.     writes/s:                     66.85
  4.     fsyncs/s:                     6.26
  5. Throughput:     # 吞吐量
  6.     read, MiB/s:                  1.54  # 表示读的带宽
  7.     written, MiB/s:               1.04  # 表示读的带宽
  8. General statistics:
  9.     total time:                   12.7426s
  10.     total number of events:       2117
  11. Latency (ms):
  12.          min:                          0.00
  13.          avg:                         86.66
  14.          max:                       2919.41
  15.          95th percentile:            646.19
  16.          sum:                     183460.80
  17. Threads fairness:
  18.     events (avg/stddev):          132.3125/24.19
  19.     execution time (avg/stddev):  11.4663/1.09
复制代码
再比例cpu性能测试:
  1. [root@xuexi ~]# sysbench cpu --threads=40 --events=10000 --cpu-max-prime=20000 run
  2. sysbench 1.0.15 (using bundled LuaJIT 2.1.0-beta2)
  3. Running the test with following options:
  4. Number of threads: 40
  5. Initializing random number generator from current time
  6. Prime numbers limit: 20000
  7. Initializing worker threads...
  8. Threads started!
  9. CPU speed:
  10. events per second: 2127.81
  11. General statistics:
  12. total time:       4.986s
  13. total number of events:    10000
  14. Latency (ms):
  15.    min:         1.72
  16.    avg:         18.16
  17.    max:         302.17
  18.    5th percentile:      110.66
  19.    sum:        181628.49
  20. Threads fairness:
  21. events (avg/stddev):   250.0000/30.81
  22. execution time (avg/stddev): 4.5407/0.10
复制代码
总结
以上就是这篇文章的全部内容了,盼望本文的内容对各人的学习大概工作具有肯定的参考学习代价,如果有疑问各人可以留言交流,谢谢各人对脚本之家的支持。

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作