sysbench 压测 详解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sysbench 压测 详解相关的知识,希望对你有一定的参考价值。
下载sysbench(mysql官网就有)
解压,进入解压以后的目录
./autogen.sh
./configure --with-mysql-includes=/usr/local/mysql/include --with-mysql-libs=/usr/local/mysql/lib
make && make install
export LD_LIBRARY_PATH=/usr/local/mysql/lib
开始进行测试
通用配置
接下来我们来分别看一下各个模式的相关参数、测试方法和结果分析。
sysbench的基本命令格式为:
sysbench –test=< test-name> [options]… < command>
主要分为三个部分:
1、–test=< test-name>
这部分是指定测试类型,基本类型有fileio,cpu,memory,threads,mutex,oltp(或者指定lua脚本)
2、[options]…
这部分包括测试需要的各种选项,有全局的也有每个测试模式自由的选项
(每个测试模式的选项可以用./sysbench –test=< test-name> help来获取)
3、< command>
控制命令,总共有五个
prepare #准备测试,主要是生成测试数据
run #执行测试,根据选项限制来执行测试
cleanup #清除准备阶段生成的测试数据
help #获取帮助文档
version #获取版本信息
几个重要的全局参数:
–num-threads=N number of threads to use [1] #测试时使用的线程数
–max-requests=N limit for total number of requests [10000] #测试过程最多执行多少次请求
–max-time=N limit for total execution time in seconds [0] #测试过程总共执行多长时间(和–max-requests效果同样,但是两个同时限定的时候谁优先还没有测试)
–report-interval=N periodically report intermediate statistics with a specified interval in seconds. 0 disables intermediate reports [0] #每隔多少秒输出测试概况(这个过程你可以观察到mysql redolog的切换情况)
–db-driver=STRING specifies database driver to use (‘help’ to get list of available drivers) #指定需求测试的数据库类型,默认是mysql
#mysql链接选项
–mysql-host=[LIST,…] MySQL server host [localhost] #mysql主机地址
–mysql-port=N MySQL server port [3306] #mysql端口
–mysql-socket=[LIST,…] MySQL socket #mysql socket文件位置,指定这个之后 其他的链接选项均可以不指定
–mysql-user=STRING MySQL user [sbtest] #用来测试的mysql用户名
–mysql-password=STRING MySQL password [] #密码
–mysql-db=STRING MySQL database name [sbtest] #测试数据库名 默认sbtest
1、测试磁盘IO性能
参数详解:
–file-num=N 代表生成测试文件的数量,默认为128。
–file-block-size=N 测试时所使用文件块的大小,如果想磁盘针对innodb存储引擎进行测试,可以将其设置为16384,即innodb存储引擎页的大小。默认为16384。
–file-total-size=SIZE 创建测试文件的总大小,默认为2G大小。
–file-test-mode=STRING 文件测试模式,包含:seqwr(顺序写), seqrewr(顺序读写), seqrd(顺序读), rndrd(随机读), rndwr(随机写), rndrw(随机读写)。
–file-io-mode=STRING 文件操作的模式,sync(同步),async(异步),fastmmap(快速mmap),slowmmap(慢速mmap),默认为sync同步模式。
–file-async-backlog=N 对应每个线程队列的异步操作数,默认为128。
–file-extra-flags=STRING 打开文件时的选项,这是与API相关的参数。
–file-fsync-freq=N 执行fsync()函数的频率。fsync主要是同步磁盘文件,因为可能有系统和磁盘缓冲的关系。 0代表不使用fsync函数。默认值为100。
–file-fsync-all=[on|off] 每执行完一次写操作,就执行一次fsync。默认为off。
–file-fsync-end=[on|off] 在测试结束时执行fsync函数。默认为on。
–file-fsync-mode=STRING文件同步函数的选择,同样是和API相关的参数,由于多个操作系统对于fdatasync支持不同,因此不建议使用fdatasync。默认为fsync。
–file-merged-requests=N 大多情况下,合并可能的IO的请求数,默认为0。
–file-rw-ratio=N 测试时的读写比例,默认时为1.5,即可3:2。
1)生成测试文件
sysbench --test=fileio --file-num=10 --file-total-size=5G prepare
2)测试
sysbench --test=fileio --file-total-size=5G --file-test-mode=rndrw --max-time=180 --max-requests=100000000 --num-threads=16 --init-rng=on --file-num=10 --file-extra-flags=direct --file-fsync-freq=0 --file-block-size=16384 run
3)结果如下
sysbench 0.4.12.10: multi-threaded system evaluation benchmark
Running the test with following options:
Number of threads: 16
Initializing random number generator from timer.
Random number generator seed is 0 and will be ignored
Extra file open flags: 4000
10 files, 512Mb each
5Gb total file size
Block size 16Kb
Number of random requests for random IO: 100000000
Read/Write ratio for combined random IO test: 1.50
Calling fsync() at the end of test, Enabled.
Using synchronous I/O mode
Doing random r/w test
Threads started!
Time limit exceeded, exiting...
(last message repeated 15 times)
Done.
Operations performed: 17981 reads, 11990 writes, 0 Other = 29971 Total
Read 280.95Mb Written 187.34Mb Total transferred 468.3Mb (2.6012Mb/sec)
166.48 Requests/sec executed
General statistics:
total time: 180.0298s
total number of events: 29971
total time taken by event execution: 2880.3206
response time:
min: 0.38ms
avg: 96.10ms
max: 390.42ms
approx. 95 percentile: 209.91ms
Threads fairness:
events (avg/stddev): 1873.1875/11.51
execution time (avg/stddev): 180.0200/0.01
##注意:主要看这里
Read 280.95Mb Written 187.34Mb Total transferred 468.3Mb (2.6012Mb/sec) 166.48 Requests/sec executed
大概是在180秒里面总共随机读取280.95MB ,写入187.24MB ,平均每秒随机读写的效率时2.6012MB ,IOPS为166.48 Requests/sec
4)清楚测试数据
sysbench --test=fileio --file-num=10 --file-total-size=5G cleanup
2、cpu测试
参数详解:
–cpu-max-prime=N 用来选项指定最大的素数,具体参数可以根据CPU的性能来设置,默认为10000
sysbench --test=cpu --cpu-max-prime=20000 run
测试结果
sysbench 0.4.12.10: multi-threaded system evaluation benchmark
Running the test with following options:
Number of threads: 1
Random number generator seed is 0 and will be ignored
Doing CPU performance benchmark
Primer numbers limit: 20000
Threads started!
Done.
General statistics:
total time: 20.8126s
total number of events: 10000
total time taken by event execution: 20.8006
response time:
min: 1.91ms
avg: 2.08ms
max: 13.94ms
approx. 95 percentile: 2.71ms
Threads fairness:
events (avg/stddev): 10000.0000/0.00
execution time (avg/stddev): 20.8006/0.00
##注意:测试的总时间(total time)即可(越小越忧)
3、内存分配及传输速度(测试了内存的连续读写性能)
参数详解:
–memory-block-size=SIZE 测试内存块的大小,默认为1K
–memory-total-size=SIZE 数据传输的总大小,默认为100G
–memory-scope=STRING 内存访问的范围,包括全局和本地范围,默认为global
–memory-hugetlb=[on|off] 是否从HugeTLB池分配内存的开关,默认为off
–memory-oper=STRING 内存操作的类型,包括read, write, none,默认为write
–memory-access-mode=STRING 内存访问模式,包括seq,rnd两种模式,默认为seq
sysbench --test=memory --memory-block-size=8K --memory-total-size=1G --num-threads=16 run
结果:
sysbench 0.4.12.10: multi-threaded system evaluation benchmark
Running the test with following options:
Number of threads: 16
Random number generator seed is 0 and will be ignored
Doing memory operations speed test
Memory block size: 8K
Memory transfer size: 1024M
Memory operations type: write
Memory scope type: global
Threads started!
Done.
Operations performed: 131072 (1223663.93 ops/sec)
1024.00 MB transferred (9559.87 MB/sec)
General statistics:
total time: 0.1071s
total number of events: 131072
total time taken by event execution: 0.3210
response time:
min: 0.00ms
avg: 0.00ms
max: 96.20ms
approx. 95 percentile: 0.00ms
Threads fairness:
events (avg/stddev): 8192.0000/7510.93
execution time (avg/stddev): 0.0201/0.03
4、oltp-数据库性能测试
参数详解:
–oltp-test-mode=STRING 执行模式{simple,complex(advanced transactional),nontrx(non-transactional),sp}。默认是complex
–oltp-reconnect-mode=STRING 重新连接模式{session(不使用重新连接。每个线程断开只在测试结束),transaction(在每次事务结束后重新连接),query(在每个SQL语句执行完重新连接),random(对于每个事务随机选择以上重新连接模式)}。默认是session
–oltp-sp-name=STRING 存储过程的名称。默认为空
–oltp-read-only=[on|off] 只读模式。Update,delete,insert语句不可执行。默认是off
–oltp-skip-trx=[on|off] 省略begin/commit语句。默认是off
–oltp-range-size=N 查询范围。默认是100
–oltp-point-selects=N number of point selects [10]
–oltp-simple-ranges=N number of simple ranges [1]
–oltp-sum-ranges=N number of sum ranges [1]
–oltp-order-ranges=N number of ordered ranges [1]
–oltp-distinct-ranges=N number of distinct ranges [1]
–oltp-index-updates=N number of index update [1]
–oltp-non-index-updates=N number of non-index updates [1]
–oltp-nontrx-mode=STRING 查询类型对于非事务执行模式{select, update_key, update_nokey, insert, delete} [select]
–oltp-auto-inc=[on|off] AUTO_INCREMENT是否开启。默认是on
–oltp-connect-delay=N 在多少微秒后连接数据库。默认是10000
–oltp-user-delay-min=N 每个请求最短等待时间。单位是ms。默认是0
–oltp-user-delay-max=N 每个请求最长等待时间。单位是ms。默认是0
–oltp-table-name=STRING 测试时使用到的表名。默认是sbtest
–oltp-table-size=N 测试表的记录数。默认是10000
–oltp-dist-type=STRING 分布的随机数{uniform(均匀分布),Gaussian(高斯分布),special(空间分布)}。默认是special
–oltp-dist-iter=N 产生数的迭代次数。默认是12
–oltp-dist-pct=N 值的百分比被视为’special’ (for special distribution)。默认是1
–oltp-dist-res=N ‘special’的百分比值。默认是75
1)创建测试用的数据
sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=sysbench --mysql-user=root --mysql-host=127.0.0.1 --mysql-password=123456 prepare
2)开始测试
sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=sysbench --mysql-user=root --mysql-host=127.0.0.1 --mysql-password=123456 --max-time=60 --oltp-read-only=off --max-requests=0 --num-threads=8 run
3)结果如下
sysbench 0.4.12.10: multi-threaded system evaluation benchmark
No DB drivers specified, using mysql
Running the test with following options:
Number of threads: 8
Random number generator seed is 0 and will be ignored
Doing OLTP test.
Running mixed OLTP test
Using Special distribution (12 iterations, 1 pct of values are returned in 75 pct cases)
Using "BEGIN" for starting transactions
Using auto_inc on the id column
Using 1 test tables
Threads started!
Time limit exceeded, exiting...
(last message repeated 7 times)
Done.
OLTP test statistics:
queries performed:
read: 263046
write: 93934
other: 37574
total: 394554
transactions: 18785 (313.05 per sec.)
deadlocks: 4 (0.07 per sec.)
read/write requests: 356980 (5948.98 per sec.)
other operations: 37574 (626.16 per sec.)
General statistics:
total time: 60.0069s
total number of events: 18785
total time taken by event execution: 479.9184
response time:
min: 2.23ms
avg: 25.55ms
max: 1696.98ms
approx. 95 percentile: 54.14ms
Threads fairness:
events (avg/stddev): 2348.1250/6.21
execution time (avg/stddev): 59.9898/0.00
##主要注意这几个参数 transactions: 18785 (313.05 per sec.)
read/write requests: 356980 (5948.98 per sec.)
other operations: 37574 (626.16 per sec.)
4)清除数据
sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=sysbench --mysql-user=root --mysql-host=127.0.0.1 --mysql-password=123456 --max-time=60 --oltp-read-only=off --max-requests=0 --num-threads=8 cleanup
以上是关于sysbench 压测 详解的主要内容,如果未能解决你的问题,请参考以下文章
mysql之 sysbench1.0.3 安装与系统压力测试