1.Sysbench工具使用
1.前言
Sysbench工具目前是很多互联网公司专门做数据库压测工具之一,相较于于其他的压测工具,它更受到众多互联网公司的青睐,因此,本次主要想要对Sysbench工具的使用一次比较全面的总结。
2.工具背景
sysbench是一个开源的、模块化的、跨平台的多线程性能测试工具,可以用来进行CPU、内存、磁盘I/O、线程、数据库的性能测试。目前支持的数据库有MySQL、Oracle和PostgreSQL。以下操作都将以支持MySQL数据库为例进行。
3.工具下载安装
该工具可以在github上进行下载,下载地址是:https://github.com/akopytov/sysbench/releases/tag/1.0.20 下载完了之后,就可以根据安装包中的安装文档一步步进行安装了(很简单)
4.sysbench使用(验证过)
#!/bin/bash host=192.168.10.146 port=3306 user=root pass=123 db=sysbench tablenum=10 table_size=10000 threadnum=8 timerun=30 luadir=/usr/share/sysbench case $1 in create) mysql -h${host} -P${port} -u${user} -p${pass} -e "create database if not exists ${db}";; prepare) cd $luadir && sysbench oltp_read_write.lua --mysql-user=${user} --mysql-password="${pass}" --mysql-host=$host --mysql-port=$port --mysql-db=${db} --table-size=${table_size} --tables=${tablenum} prepare ;; run) cd $luadir && sysbench oltp_read_write.lua --threads=${threadnum} --mysql-user=${user} --mysql-password="${pass}" --mysql-host=$host --mysql-port=$port --mysql-db=${db} --report-interval=1 --table-size=${table_size} --tables=${tablenum} run ;; cleanup) cd $luadir && sysbench oltp_read_write.lua --threads=${threadnum} --mysql-user=${user} --mysql-password="${pass}" --mysql-host=$host --mysql-port=$port --mysql-db=${db} --report-interval=1 --table-size=${table_size} --tables=${tablenum} cleanup ;; *) echo "选项错误,请重新输入" exit;; esac
5.测试服务器的cpu性能
# 素数上限2万,默认10秒,2个线程 sysbench cpu --cpu-max-prime=20000 --threads=2 run
5.1测试结果
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
[root@node01 tmp]# sysbench cpu --cpu-max-prime=20000 --threads=2 run sysbench 1.1.0-bbee5d5 (using bundled LuaJIT 2.1.0-beta3) Running the test with following options: Number of threads: 2 //指定线程个数 Initializing random number generator from current time Prime numbers limit: 20000 //每个线程产生的素数上限均为2万个 Initializing worker threads... Threads started! CPU speed: events per second: 446.69 //所有线程每秒完成了446.69次event Throughput: events/s (eps): 446.6855 time elapsed: 10.0026s //共耗时10秒 total number of events: 4468 //在10秒内共完成了4468次event Latency (ms): min: 2.09 //完成1次event最少耗时2.09ms avg: 4.44 //完成所有events平均耗时4.44ms max: 24.57 //完成1次event最大耗时24.57毫秒 95th percentile: 13.22 //95%的events完成都在13.22ms完成 sum: 19842.20 //每个线程耗时10ms,2个线程总共耗时20ms Threads fairness: events (avg/stddev): 2234.0000/0.00 //平均每完成2234次event,标准差是0.00 execution time (avg/stddev): 9.9211/0.02 //每个线程平均耗时10秒,标准差为0.02event:表示完成了几轮素数计算stddev:标准差,在相同时间内,多个线程分别完成素数计算次数是否稳定,如果数值越低,那么多个线程的结果就越接近(即越稳定),该线程对单线程无意义。
6.测试磁盘iops
注意:一定要到你测试的磁盘目录下执行,否则可能测试系统盘了,因此如果我们想要做数据库下的磁盘的iops的话,那么我们一定要到有数据库的数据目录下进行测试(以下三步走)
sysbench fileio --file-total-size=1G --file-test-mode=rndrw --time=30 --max-requests=0 prepare sysbench fileio --file-total-size=1G --file-test-mode=rndrw --time=30 --max-requests=0 run sysbench fileio --file-total-size=1G --file-test-mode=rndrw --time=30 --max-requests=0 cleanup
##主要这里有些参数用的是默认值,比如 : --file-num用的是默认值128 ,因此如果用默认的128的话,那么可能测出的iops将达不到预想的结果
##这里面的参数都可以进行调整,以我们实际的情况为准,这个很重要!
测试结果如下
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
Threads started! File operations: reads/s: 5941.19 writes/s: 3960.78 fsyncs/s: 99.03 Throughput: read, MiB/s: 92.83 written, MiB/s: 61.89 General statistics: total time: 30.0054s total number of events: 300129 Latency (ms): min: 0.00 avg: 0.10 max: 8.27 95th percentile: 0.42 sum: 29799.22 Threads fairness: events (avg/stddev): 300129.0000/0.00 execution time (avg/stddev): 29.7992/0.00 ##这里用的默认的生成128个文件,其中read, MiB/s + written, MiB/s之和是我们磁盘io的总带宽,换算成iops的话,需要知道此事磁盘的一个block块的大小(比如说4k),那么此时的iops的结果为:(92.83+61.89)*1024/4=39608.32 表示磁盘每秒可混合读写30000次。
注意:这里有一个问题,如果生成的文件总和大小很大,且生成的文件数很多的话,那么可能测试结果就不是很精确了,因为,由于磁盘能力的显示,在快速读写文件同时,会发生大量的cpu上下文的切换和中断,因此在实际的生产中,最好要预估一下数据量和每天用户访问的次数等等。