mysql 性能测试---sysbench
1.sysbench 概述
sysbench是一个模块化的、跨平台、多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况。
sysbench支持以下几种测试模式:
1、CPU运算性能
2、磁盘IO性能
3、调度程序性能
4、内存分配及传输速度
5、POSIX线程性能
6、数据库性能(OLTP基准测试)
目前sysbench主要支持 mysql,drizzle,pgsql,oracle 等几种数据库。
下载安装软件
http://imysql.com/wp-content/uploads/2014/09/sysbench-0.4.12-1.1.tgz
2.sysbench 的安装
# 安装依赖包
sudo yum install automake libtool -y
# 编译安装sysbench
./autogen.sh ./configure --with-mysql-includes=/usr/local/webserver/percona/include/ --with-mysql-libs=/usr/local/webserver/percona/lib/ sudo make
# 如果报错:/usr/bin/ld: cannot find -lmysqlclient_r,则
ln -s /usr/lib64/mysql/libmysqlclient_r.so.16 /usr/lib/libmysqlclient_r.so
安装完成后会在当前目录生成sysbench 目录,里面有sysbench 可执行文件。
sysbench --version
3.进行OLTP性能测试准备
# 初始化测试库环境(总共10个测试表,每个表 100000 条记录,填充随机生成的数据)
create database ledo;
./sysbench --mysql-socket=/my/data/tmp/mysql.sock \ --mysql-port=3306 --mysql-user=root --mysql-db=ledo \ --mysql-password="2s5c688g96tujb5q" --test=tests/db/oltp.lua \ --oltp_tables_count=10 --oltp-table-size=80000000 \ --rand-init=on prepare
# 参数的解释:
--test=tests/db/oltp.lua 表示调用 tests/db/oltp.lua 脚本进行 oltp 模式测试 --oltp_tables_count=10 表示会生成 10 个测试表 --oltp-table-size=80000000 表示每个测试表填充数据量为 80000000 --rand-init=on 表示每个测试表都是用随机数据来填充的
真实测试场景中,数据表建议不低于10个,单表数据量不低于500万行,当然了,要视服务器硬件配置而定。如果是配备了SSD或者PCIE SSD这种高IOPS设备的话,则建议单表数据量最少不低于1亿行。
4.进行OLTP 性能测试
./sysbench --mysql-socket=/my/data/tmp/mysql.sock \ --mysql-user=root --mysql-password="2s5c688g96tujb5q" \ --test=oltp --test=tests/db/oltp.lua --oltp-table-size=80000000 \ --num-threads=8 --oltp-read-only=off --mysql-table-engine=innodb --mysql-db=ledo \ --report-interval=10 --rand-type=uniform --max-time=3600 \ --max-requests=0 --percentile=99 run >> /tmp/sysbench.log1
# 多线程测试
for i in 16 32 64 128 256; do cd /home/dbctl/sysbench-0.4.12-1.1/sysbench ./sysbench --mysql-socket=/my/data/tmp/mysql.sock --mysql-user=root --mysql-password="2s5c688g96tujb5q" --test=oltp --test=tests/db/oltp.lua --oltp-table-size=80000000 --num-threads=$i --oltp-read-only=off --mysql-table-engine=innodb --mysql-db=ledo --report-interval=10 --rand-type=uniform --max-time=60 --max-requests=0 --percentile=99 run >> /tmp/sysbench.log1 done
# 参数解释:
1 --num-threads=8 表示发起 8个并发连接 2 --oltp-read-only=off 表示不要进行只读测试,也就是会采用读写混合模式测试 3 --report-interval=10 表示每10秒输出一次测试进度报告 4 --rand-type=uniform 表示随机类型为固定模式,其他几个可选随机模式:uniform(固定),gaussian(高斯),special(特定的),pareto(帕累托) 5 --max-time=120 表示最大执行时长为 120秒(即测试的持续时间) 6 --max-requests=0 表示总请求数为 0,因为上面已经定义了总执行时长,所以总请求数可以设定为 0;也可以只设定总请求数,不设定最大执行时长 7 --percentile=99 表示设定采样比例,默认是 95%,即丢弃1%的长请求,在剩余的99%里取最大值
真实测试场景中,建议持续压测时长不小于30分钟,否则测试数据可能不具参考意义。
五、测试结果解读
[3570s] threads: 8, tps: 1868.40, reads/s: 26158.60, writes/s: 7473.60, response time: 5.67ms (99%) [3580s] threads: 8, tps: 1871.90, reads/s: 26207.39, writes/s: 7487.80, response time: 5.79ms (99%) [3590s] threads: 8, tps: 1874.80, reads/s: 26248.11, writes/s: 7499.40, response time: 5.60ms (99%) [3600s] threads: 8, tps: 1884.50, reads/s: 26381.20, writes/s: 7537.60, response time: 5.26ms (99%) OLTP test statistics: queries performed: read: 94003182 ---读总数 write: 26858052 ---写总数 other: 13429026 ---其他操作总数(SELECT、INSERT、UPDATE、DELETE之外的操作,例如COMMIT等
total: 134290260 ---全部总数
transactions: 6714513 (1865.14 per sec.) ---总事务数(每秒的事务数)
deadlocks: 0 (0.00 per sec.) ---发生死锁的总数
read/write requests: 120861234 (33572.53 per sec.) ---读写总数(每秒读写次数)
other operations: 13429026 (3730.28 per sec.) ---其他操作总数
General statistics:
total time: 3600.0040s ---总耗时
total number of events: 6714513 ---总的事务数
total time taken by event execution: 28781.5070s ---所有事务耗时(不考虑并行因素)
response time: ---响应时间统计
min: 3.26ms ---最小耗时
avg: 4.29ms ---平均耗时
max: 1046.27ms ---最大耗时
approx. 99 percentile: 5.62ms ---超过99%平均耗时
Threads fairness: ---并发统计
events (avg/stddev): 839314.1250/700.77
execution time (avg/stddev): 3597.6884/0.02
注:转自http://blog.csdn.net/oahz4699092zhao/article/details/53332105
浙公网安备 33010602011771号