1.前言
Sysbench工具目前是很多互联网公司专门做数据库压测工具之一,相较于于其他的压测工具,它更受到众多互联网公司的青睐,因此,本次主要想要对Sysbench工具的使用一次比较全面的总结。
2.工具背景
数据库的性能测试。目前支持的数据库有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测试结果
[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:标准差,在相同时间内,多个线程分别完成素数计算次数是否稳定,如果数值越低,那么多个线程的结果就越接近(即越稳定),该线程对单线程无意义。
CPU测试结果
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将达不到预想的结果
##这里面的参数都可以进行调整,以我们实际的情况为准,这个很重要!
测试结果如下
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次。
View:iops测试结果
注意:这里有一个问题,如果生成的文件总和大小很大,且生成的文件数很多的话,那么可能测试结果就不是很精确了,因为,由于磁盘能力的显示,在快速读写文件同时,会发生大量的cpu上下文的切换和中断,因此在实际的生产中,最好要预估一下数据量和每天用户访问的次数等等。