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数据库跟踪优化的更多相关文章

  1. Mysql多线程性能测试工具sysbench 安装、使用和测试

    From:http://www.cnblogs.com/zhoujinyi/archive/2013/04/19/3029134.html 摘要:      sysbench是一个开源的.模块化的.跨 ...

  2. sysbench 安装、使用和测试

    摘要:      sysbench是一个开源的.模块化的.跨平台的多线程性能测试工具,可以用来进行CPU.内存.磁盘I/O.线程.数据库的性能测试.目前支持的数据库有MySQL.Oracle和Post ...

  3. LINUX系统下MySQL 压力测试工具super smack

    摘要:1.源文件下载地址:http://vegan.net/tony/supersmack/2.安装:注意在编译时,可以先把对应的libmysqlclient.so.*拷贝到/usr/lib3.测试: ...

  4. 【JMeter】JMeter进行简单的数据库(mysql)压力测试

    JMeter进行简单的数据库(mysql)压力测试 1.点击测试计划,再点击“浏览”,把JDBC驱动添加进来: 注:JDBC驱动一般的位置在java的安装地址下,路径类似于:    \java\jre ...

  5. 【JMeter】JMeter完成一个MySql压力测试

    jmeter也可以用来做数据库的压力测试,并且兼容各种数据库类型,只需要更改对应的数据库驱动类和url.以下为整理到的数据库驱动类对应url.并且给出一个mysql数据库select的简单应用.如下: ...

  6. 使用mysqlslap进行MySQL压力测试

    使用mysqlslap进行MySQL压力测试发表于236 天前 ? MySQL ? 暂无评论 MySQL从5.1.4版开始带有一个压力测试工具mysqlslap,通过模拟多个并发客户端访问mysql来 ...

  7. 使用sysbench对mysql压力测试

    sysbench是一个模块化的.跨平台.多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况.关于这个项目的详细介绍请看:https://github.com/akopytov/sy ...

  8. mysql之 sysbench1.0.3 安装与系统压力测试

    针对系统和数据库压测是项目上线前必做的一项,这里使用的是最新版本的sysbench做的压测使用详解.sysbench可以做系统层面的压力测试(CPU.内存.硬盘IO.互斥锁.Thead),也可以做数据 ...

  9. 使用sysbench 进行msyql oltp压力测试

    安装参考: https://github.com/akopytov/sysbench#linux#参数说明 需要说明的选项: mysql-db=dbtest1a:测试使用的目标数据库,这个库名要事先创 ...

随机推荐

  1. Linux 常用命令——df, du, ln

    1. df 列出文件系统的整体磁盘使用量 2. du 评估文件系统的磁盘使用量(常用在推估目录所占容量),也可以计算文件或文件夹大小 3. ln 创建实体连接(hard link) 或 符号连接(Sy ...

  2. bzoj1345 序列问题

    题意: 给你一个序列,长度为n.你需要进行n - 1次操作,每次合并两个相邻的数,代价是max,合并后成为max,求最小代价. n <= 1e6 解: 有个显然的做法是nlogn的,显然不行.. ...

  3. 洛谷P3952 时间复杂度

    大毒瘤...... 时隔快半年我终于花了两个小时堪堪A掉这一题...果然我还没有准备好. 想法:用DFS模拟递归. 时间复杂度的处理:每层循环取max,然后相加. 最大难点:各种繁杂而令人发指的特判. ...

  4. FTP文件乱码和传输模式解释

    转: FTP文件乱码和传输模式解释 2017年02月18日 10:50:03 -Hermes- 阅读数:12112更多 所属专栏: 异常解决方案急诊室   版权声明:大侠,在转载时请注明出处,小弟不胜 ...

  5. Service Fabric基本概念: Node, Application, Service, Partition/Replicas

    作者:张鼎松 (Dingsong Zhang) @ Microsoft 在上一节中,为大家简明扼要的介绍了微软针对现代分布式系统在Azure上实现的相关服务组件.紧接上文内容,本节将为大家介绍Azur ...

  6. InfluxDB1.2.4部署(centos6.8)

    InfluxDB介绍 官网:https://www.influxdata.com/ 文档:https://docs.influxdata.com/influxdb/v1.2/introduction/ ...

  7. FastDFS与Nginx的搭建及遇到的问题

    1.1  FastDFS与Nginx的搭建 可以使用一台虚拟机来模拟,只有一个Tracker.一个Storage服务. 配置nginx访问图片. 1.1.1   搭建步骤 第一步:把fastDFS需要 ...

  8. Hbase记录-HBase扫描/计数/权限

    HBase扫描   scan 命令用于查看HTable数据.使用 scan 命令可以得到表中的数据.它的语法如下: scan ‘<table name>’ 下面的示例演示了如何使用scan ...

  9. CentOS6.8下查看yum及rpm安装后的软件位置

    参考资料:http://blog.csdn.net/ngvjai/article/details/7997743   http://blog.sina.com.cn/s/blog_976e495701 ...

  10. OBS 录制视频 自己留存

    1. 下载安装 软件下载地址:https://github.com/jp9000/obs-studio/releases/download/19.0.2/OBS-Studio-19.0.2-Full- ...