sysbench压测工具的安装和使用

sysbench是一款开源的多线程性能测试工具,可以执行CPU/内存/线程/IO/数据库等方面的性能测试。
数据库目前支持MySQL/Oracle/PostgreSQL。具体的一些参数设置,需要根据不同的测试要求来进行调整

系统使用CenOS7-1604-mini
一、安装需求环境

1
yum group install 'development tools' -y
2
yum install mysql-devel git vim -y

二、下载sysbench

1
cd /tmp/ && git clone https://github.com/akopytov/sysbench.git
2
cd sysbench*

3.安装
如果MySQL不是默认路径可以手工指定

1
./configure --with-mysql-includes=/usr/local/mysql/include --with-mysql-libs=/usr/local/mysql/lib
1
cd /tmp/sysbench*
2
./autogen.sh
3
./configure
4
make
5
make install

三、测试
1.cpu性能测试
sysbench –test=cpu –cpu-max-prime=20000 run
cpu测试主要是进行素数的加法运算,在上面的例子中,指定了最大的素数为 20000,自己可以根据机器cpu的性能来适当调整数值。
2.线程测试
sysbench –test=threads –num-threads=64 –thread-yields=100 –thread-locks=2 run
3.磁盘IO性能测试
sysbench –test=fileio –num-threads=16 –file-total-size=3G –file-test-mode=rndrw prepare
sysbench –test=fileio –num-threads=16 –file-total-size=3G –file-test-mode=rndrw run
sysbench –test=fileio –num-threads=16 –file-total-size=3G –file-test-mode=rndrw cleanup
4.内存测试

sysbench –test=memory –memory-block-size=8k –memory-total-size=8G run
上述参数指定了本次测试整个过程是在内存中传输 8G 的数据量,每个 block 大小为 8K。
5.OLTP测试
需要事先创建数据库如果不指定默认是sbtest

1
create database sbtest character set utf8 collate utf8_general_ci

先创建表和填充测试数据

1
sysbench   --db-driver=mysql  --test=oltp.lua --mysql-table-engine=myisam --oltp-table-size=1000000 \
2
--mysql-socket=/tmp/mysql.sock --mysql-user=test --mysql-host=localhost \
3
--mysql-password=test prepare

上述参数指定了本次测试的表存储引擎类型为 myisam,这里需要注意的是,官方网站上的参数有一处有误,即 –mysql-table-engine,官方网站上写的是 –mysql-table-type,这个应该是没有及时更新导致的。另外,指定了表最大记录数为 1000000,其他参数就很好理解了,主要是指定登录方式。测试 OLTP 时,可以自己先创建数据库 sbtest,或者自己用参数 –mysql-db 来指定其他数据库。–mysql-table-engine 还可以指定为 innodb 等 MySQL 支持的表存储引擎类型

进行测试

1
sysbench --db-driver=mysql --mysql-host=1.2.3.4. --mysql-port=3306 --mysql-user=tpcc \
2
--mysql-password=tpcc --test=tests/db/oltp.lua --oltp_tables_count=10 \
3
--oltp-table-size=10000000 --num-threads=8 --oltp-read-only=off   \
4
--report-interval=10 --rand-type=uniform --max-time=3600 \
5
 --max-requests=0 --percentile=99 run

[prepare|run|cleanup]
几个选项稍微解释下
–test=tests/db/oltp.lua 表示调用 tests/db/oltp.lua 脚本进行 oltp 模式测试
–oltp_tables_count=10 表示会生成 10 个测试表
–oltp-table-size=1000000 表示每个测试表填充数据量为 1000000
–rand-init=on 表示每个测试表都是用随机数据来填充的
–num-threads=8 表示发起 8个并发连接
–oltp-read-only=off 表示不要进行只读测试,也就是会采用读写混合模式测试
–report-interval=10 表示每10秒输出一次测试进度报告
–rand-type=uniform 表示随机类型为固定模式,其他几个可选随机模式:uniform,gaussian,special,pareto
–max-time=120 表示最大执行时长为 120秒
–max-requests=0 表示总请求数为 0,因为上面已经定义了总执行时长,所以总请求数可以设定为 0;也可以只设定总请求数,不设定最大执行时长
–percentile=99 表示设定采样比例,默认是 95%,即丢弃1%的长请求,在剩余的99%里取最大值
即:模拟 对10个表并发OLTP测试,每个表1000万行记录,持续压测时间为 1小时。
真实测试场景中,建议持续压测时长不小于30分钟,否则测试数据可能不具参考意义。
注意:oltp.lua不是一个参数而是一个文件,在源码目录test/include/oltp/里面你可以指定路径也可以切换到此目录执行,sysbench的测试只是基准测试,并不能代表实际企业环境下的性能指标真实测试场景中,数据表建议不低于10个,单表数据量不低于500万行,当然了,要视服务器硬件配置而定。如果是配备了SSD或者PCIE SSD这种高IOPS设备的话,则建议单表数据量最少不低于1亿行。