sysbench安装、对Mysql压力测试、结果解读及mysql数据库跟踪优化
sysbench是一款开源的多线程性能测试工具,可以执行CPU/内存/线程/IO/数据库等方面的性能测试。
sysbench支持以下几种测试模式: 1、CPU运算性能
2、磁盘IO性能
3、调度程序性能
4、内存分配及传输速度
5、POSIX线程性能
6、数据库性能(OLTP基准测试)
目前sysbench主要支持 mysql,drizzle,pgsql,oracle 等几种数据库。
本次测试服务器配置如下:

一、编译安装
编译非常简单,可参考 README 文档,简单步骤如下:
项目地址https://launchpad.net/sysbench
# tar xf sysbench-0.4.12-1.1.tgz
cd sysbench-0.4.12-1.1
# chmod +x autogen.sh
[root@centossz008 sysbench-0.4.12-1.1]# ./autogen.sh
automake 1.10.x (aclocal) wasn't found, exiting
# yum install -y automake
# ./autogen.sh
libtoolize 1.4+ wasn't found, exiting
# yum install -y libtool
安装
# ./autogen.sh
# ./configure --with-mysql-includes=/usr/local/mysql/include --with-mysql-libs=/usr/local/mysql/lib
# make && make install
如果 make 没有报错,就会在 /root/sysbench-0.4.12-1.1/sysbench 目录下生成二进制命令行工具 sysbench
# ls -l sysbench
-rwxr-xr-x. 1 root root 3281264 Apr 3 13:18 sysbench
二、OLTP测试前准备
初始化测试库环境(总共10个测试表,每个表 100000 条记录,填充随机生成的数据):
# cd /root/sysbench-0.4.12-1.1/sysbench
# mysqladmin -uroot -pyourpassword create sbtest
# ./sysbench --mysql-host=localhost --mysql-port=3306 --mysql-user=root --mysql-password=yourpassword \
--test=tests/db/oltp.lua --oltp_tables_count=10 --oltp-table-size=5000000 --rand-init=on prepare
关于这几个参数的解释:
--test=tests/db/oltp.lua 表示调用 tests/db/oltp.lua 脚本进行 oltp 模式测试
--oltp_tables_count=10 表示会生成 10 个测试表
--oltp-table-size=5000000 表示每个测试表填充数据量为 5000000
--rand-init=on 表示每个测试表都是用随机数据来填充的
如果在本机,也可以使用 –mysql-socket 指定 socket 文件来连接。加载测试数据时长视数据量而定,若过程比较久需要稍加耐心等待。
真实测试场景中,数据表建议不低于10个,单表数据量不低于500万行,当然了,要视服务器硬件配置而定。如果是配备了SSD或者PCIE SSD这种高IOPS设备的话,则建议单表数据量最少不低于1亿行。
三、进行OLTP测试
在上面初始化数据参数的基础上,再增加一些参数,即可开始进行测试了:
此次测试启动了256个线程,10个测试表,每个表中灌入500W条数据,测试时间1个小时
./sysbench --mysql-host=localhost --mysql-port=3306 --mysql-user=root --mysql-password=yourpassword --test=tests/db/oltp.lua --oltp_tables_count=10 --oltp-table-size=5000000 --num-threads=256 --oltp-read-only=off --report-interval=10 --rand-type=uniform
--max-time=3600 --max-requests=1000000 --percentile=99 run >> ./log/sysbench_oltpX_256_20160403.log
在当前目录创建存放日志的目录
# mkdir log
# ./sysbench --mysql-host=localhost --mysql-port=3306 --mysql-user=root \
--mysql-password=myoa888.com --test=tests/db/oltp.lua --oltp_tables_count=10 \
--oltp-table-size=10000000 --num-threads=8 --oltp-read-only=off \
--report-interval=10 --rand-type=uniform --max-time=3600 \
--max-requests=0 --percentile=99 run >> ./log/sysbench_oltpX_8_20160403.log
几个选项稍微解释下
--num-threads=8 表示发起 8个并发连接
--oltp-read-only=off 表示不要进行只读测试,也就是会采用读写混合模式测试
--report-interval=10 表示每10秒输出一次测试进度报告
--rand-type=uniform 表示随机类型为固定模式,其他几个可选随机模式:uniform(固定),gaussian(高斯),special(特定的),pareto(帕累托)
--max-time=3600 表示最大执行时长为 3600秒
--max-requests=0 表示总请求数为 0,因为上面已经定义了总执行时长,所以总请求数可以设定为 0;也可以只设定总请求数,不设定最大执行时长
--percentile=99 表示设定采样比例,默认是 95%,即丢弃1%的长请求,在剩余的99%里取最大值
即:模拟 对10个表并发OLTP测试,每个表1000万行记录,持续压测时间为 1小时。
真实测试场景中,建议持续压测时长不小于30分钟,否则测试数据可能不具参考意义。
四、测试结果解读:
测试结果解读如下:
sysbench 0.5: multi-threaded system evaluation benchmark Running the test with following options:
Number of threads: 256
Report intermediate results every 10 second(s)
Random number generator seed is 0 and will be ignored -- 线程启动
Threads started! -- 每10秒钟报告一次测试结果,tps、每秒读、每秒写、99%以上的响应时长统计
[ 10s] threads: 256, tps: 524.19, reads/s: 7697.05, writes/s: 2143.56, response time: 1879.46ms (99%)
[ 20s] threads: 256, tps: 96.50, reads/s: 1351.01, writes/s: 373.30, response time: 9853.49ms (99%)
[ 30s] threads: 256, tps: 235.50, reads/s: 3297.01, writes/s: 946.90, response time: 2150.47ms (99%)
[ 40s] threads: 256, tps: 115.50, reads/s: 1617.00, writes/s: 491.40, response time: 4562.75ms (99%)
[ 50s] threads: 256, tps: 262.10, reads/s: 3669.41, writes/s: 1016.10, response time: 2049.90ms (99%)
[ 60s] threads: 256, tps: 121.50, reads/s: 1701.00, writes/s: 499.10, response time: 3666.03ms (99%)
[ 70s] threads: 256, tps: 201.40, reads/s: 2735.10, writes/s: 769.50, response time: 3867.82ms (99%)
[ 80s] threads: 256, tps: 204.70, reads/s: 2950.29, writes/s: 838.10, response time: 2724.99ms (99%)
[ 90s] threads: 256, tps: 118.40, reads/s: 1657.61, writes/s: 490.00, response time: 3835.53ms (99%) OLTP test statistics:
queries performed:
read: 8823206 -- 读总数
write: 2520916 -- 写总数
other: 1260458 -- 其他操作总数(SELECT、INSERT、UPDATE、DELETE之外的操作,例如COMMIT等)
total: 12604580 -- 全部总数
transactions: 630229 (174.94 per sec.) -- 总事务数(每秒事务数)
deadlocks: 0 (0.00 per sec.) -- 发生死锁总数
read/write requests: 11344122 (3148.86 per sec.) -- 读写总数(每秒读写次数)
other operations: 1260458 (349.87 per sec.) -- 其他操作总数(每秒其他操作次数) General statistics: -- 一些统计结果
total time: 3602.6152s -- 总耗时
total number of events: 630229 -- 共发生多少事务数
total time taken by event execution: 921887.7227s -- 所有事务耗时相加(不考虑并行因素)
response time: -- 响应时间
min: 6.52ms -- 最小耗时
avg: 1462.78ms -- 平均耗时
max: 9918.51ms -- 最长耗时
approx. 99 percentile: 3265.01ms -- 超过99%平均耗时 Threads fairness: -- 线程的稳定性
events (avg/stddev): 2461.8320/34.60 -- 事件(平均值/偏差)
execution time (avg/stddev): 3601.1239/0.63 -- 执行时间(平均值/偏差)
关于测试后的性能优化:
1、善后清理工作:
进mysql删除sbtest库
mysql> drop database sbtest;
可以运行./mysqltuner.pl程序,根据建议对数据库进行调优后,再使用sysbench对OLTP进行测试,看看TPS是不是会有所提高。
注意:sysbench的测试只是基准测试,并不能代表实际企业环境下的性能指标。
2、运行优化建议工具
# ./mysqltuner.pl
建议:
General recommendations:
Run OPTIMIZE TABLE to defragment tables for better performance
MySQL started within last 24 hours - recommendations may be inaccurate
Reduce your overall MySQL memory footprint for system stability
Enable the slow query log to troubleshoot bad queries
Reduce or eliminate unclosed connections and network issues
Variables to adjust:
*** MySQL's maximum memory usage is dangerously high ***
*** Add RAM before increasing MySQL buffer variables ***
query_cache_type (=0)
innodb_buffer_pool_size (>= 33G) if possible.
innodb_buffer_pool_instances(=27)
3、修改mysql参数
# vim /etc/my.cnf
innodb_buffer_pool_instances = 27
innodb_buffer_pool_size = 3600M
每轮测试完成后,都重启mysqld实例,并且用下面的方法删除系统cache,释放swap(如果用到了swap的话),甚至可以重启整个OS。
# sync -- 将脏数据刷新到磁盘
# sync -- 将脏数据刷新到磁盘
# echo 3 > /proc/sys/vm/drop_caches -- 清除OS Cache
# swapoff -a && swapon -a -- 清除OS swap缓存
4、再次启动测试流程
sysbench安装、对Mysql压力测试、结果解读及mysql数据库跟踪优化的更多相关文章
- Mysql多线程性能测试工具sysbench 安装、使用和测试
From:http://www.cnblogs.com/zhoujinyi/archive/2013/04/19/3029134.html 摘要: sysbench是一个开源的.模块化的.跨 ...
- sysbench 安装、使用和测试
摘要: sysbench是一个开源的.模块化的.跨平台的多线程性能测试工具,可以用来进行CPU.内存.磁盘I/O.线程.数据库的性能测试.目前支持的数据库有MySQL.Oracle和Post ...
- LINUX系统下MySQL 压力测试工具super smack
摘要:1.源文件下载地址:http://vegan.net/tony/supersmack/2.安装:注意在编译时,可以先把对应的libmysqlclient.so.*拷贝到/usr/lib3.测试: ...
- 【JMeter】JMeter进行简单的数据库(mysql)压力测试
JMeter进行简单的数据库(mysql)压力测试 1.点击测试计划,再点击“浏览”,把JDBC驱动添加进来: 注:JDBC驱动一般的位置在java的安装地址下,路径类似于: \java\jre ...
- 【JMeter】JMeter完成一个MySql压力测试
jmeter也可以用来做数据库的压力测试,并且兼容各种数据库类型,只需要更改对应的数据库驱动类和url.以下为整理到的数据库驱动类对应url.并且给出一个mysql数据库select的简单应用.如下: ...
- 使用mysqlslap进行MySQL压力测试
使用mysqlslap进行MySQL压力测试发表于236 天前 ? MySQL ? 暂无评论 MySQL从5.1.4版开始带有一个压力测试工具mysqlslap,通过模拟多个并发客户端访问mysql来 ...
- 使用sysbench对mysql压力测试
sysbench是一个模块化的.跨平台.多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况.关于这个项目的详细介绍请看:https://github.com/akopytov/sy ...
- mysql之 sysbench1.0.3 安装与系统压力测试
针对系统和数据库压测是项目上线前必做的一项,这里使用的是最新版本的sysbench做的压测使用详解.sysbench可以做系统层面的压力测试(CPU.内存.硬盘IO.互斥锁.Thead),也可以做数据 ...
- 使用sysbench 进行msyql oltp压力测试
安装参考: https://github.com/akopytov/sysbench#linux#参数说明 需要说明的选项: mysql-db=dbtest1a:测试使用的目标数据库,这个库名要事先创 ...
随机推荐
- PendingIntent的使用
1, 构造intent Intent mIntent = new Intent("android.intent.action.MAIN"); ComponentName comp ...
- .net跨防火墙链接oracle连接池链接长时间无通讯数据被断开后报错问题解决
环境: .net 4.0以上使用Oracle.ManagedDataAccess组件链接oracle数据库,应用程序与数据库之间存在硬件防火墙. 症状:应用程序启动后正常访问,如果出现长时间无数据库请 ...
- 网络流 KM dinic
study from: https://blog.csdn.net/A_Comme_Amour/article/details/79356220 1. Edmonds-Karp 无优化 最坏时间复杂度 ...
- C++中hpp的适用
本文第一部分转载百度百科,在此感谢百度.第二部分示例为独立编写. hpp,其实质就是将.cpp的实现代码混入.h头文件当中,定义与实现都包含在同一文件,则该类的调用者只需要include该hpp文件即 ...
- DoubleOps.java
/****************************************************************************** * Compilation: javac ...
- shiro中自定义realm实现md5散列算法加密的模拟
shiro中自定义realm实现md5散列算法加密的模拟.首先:我这里是做了一下shiro 自定义realm散列模拟,并没有真正链接数据库,因为那样东西就更多了,相信学到shiro的人对连接数据库的一 ...
- H5新特性之拖拽文件
H5新增了drag事件,在H5中拖拽是十分常见的. 可以拖拽的分为页面内的和页面外的 页面内的一般默认可以拖拽的是img和a标签 页面外的常指的是文件 上代码吧~ let zoom = documen ...
- python自动化运维之路~DAY6
python自动化运维之路~DAY6 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如果你想开发一款游戏,会存在角色的混搭的情况,这个时候“面向对象过程”就出现了,他能轻松的解决 ...
- WebServer Security apache / bind / IIS5
s C:\Users\Lindows\Desktop\学习参考 Apache_配置规范_(Linux).zip Apache_配置规范_(Windows).zip BIND_配置规范.zip IIS5 ...
- Java 基础生词表
class [klɑːs] : 类 (计算机科学); public ['pʌblɪk] : 公众的; void [vɒɪd] : 无返回类型; main [meɪn] : 主要的; static [' ...