sysbench是一个模块化的、跨平台、多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况。
目前sysbench代码托管在launchpad上,项目地址:https://launchpad.net/sysbench(原来的官网 http://sysbench.sourceforge.net 已经不可用),源码采用bazaar管理。

一、 下载源码包
安装epel包后以便安装bzr客户端:

rpm -Uvh http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

随着时间的推移及版本的更新,epel 的rpm包的地址会发生改变,但是只要域名不变,我们就可以通过

网址 http://dl.fedoraproject.org/pub/epel 一个目录一个目录的查找到我们需要的epel 安装包。

然后就可以开始安装bzr客户端了:

yum install bzr

之后,就可以开始用bzr客户端下载tpcc-mysql源码了。

cd /tmp
bzr branch lp:sysbench

sysbench支持以下几种测试模式:

1、CPU运算性能
2、磁盘IO性能
3、调度程序性能
4、内存分配及传输速度
5、POSIX线程性能
6、数据库性能(OLTP基准测试)
目前sysbench主要支持 mysql,drizzle,pgsql,oracle 等几种数据库。

如果需要测试PostgreSQL、Oracle,则在configure时需要加上 --with-oracle 或者 --with-pgsql 参数

二、编译安装

  在编译安装之前,有些依赖包需要安装,我安装时只遇到以下几个。如果有需要其他的请自行补充:

 

 yum install -y automake libtool

编译非常简单,可参考 README 文档,简单步骤如下:

cd /tmp/sysbench
./autogen.sh
./configure --prefix=/usr/local --with-mysql-includes=/usr/include/mysql/ --with-mysql-libs=/usr/lib/mysql/ && make && make install

说明:

  --with-mysql-include : 指定 mysql 头文件的路径。一般是 针对mysql 数据环境变量的$BASEDIR/inlucde

--with-mysql-libs:       指定mysql 库文件的路径,一般是针对mysql 数据环境变量的$BASEDIR/lib

  --prefix:                     指定可执行文件的存放路径

 
# 如果 make 没有报错,就会在 sysbench 目录下生成二进制命令行工具 sysbench
sysbench]# ls -la sysbench/sysbench -rwxr-xr-x 1 root root 1531821 Mar 2 07:28 sysbench/sysbench
三、参数说明

--test=tests/db/oltp.lua 表示调用 tests/db/oltp.lua 脚本进行 oltp 模式测试
--oltp_tables_count=20 表示会生成 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测试前准备

关于sysbench命令的语法格式这里不做介绍了,可通过sysbench --help来查看。 如果第一次使用的话,只需要知道,前面所有的配置是一样的,只有最后一个参数决定了sysbench 所做的操作,比如:

  •   prepare :: 准备数据
  •   run       :: 进行测试
  •   cleanup :: 清除数据
  •   help      :: 查看帮助文档
  •   version  :: 查看版本信息

下面初始化测试库环境(总共20个测试表,每个表 100000 条记录,填充随机生成的数据):

cd /tmp/sysbench/sysbench
# 创建测试数据库
mysqladmin create sbtest
# 登录mysql ,给本地用户授权
mysql
grant all on sbtest to ''@'localhost';
flush privileges;
exit
# 准备初始数据
./sysbench --mysql-host=10.10.100.191 --mysql-port=8066 --mysql-user=test --mysql-password=test123 --mysql-db=test --test=tests/db/oltp.lua --oltp_tables_count=20 --oltp-table-size=1000000 --rand-init=on prepare

四、进行OLTP测试

在上面初始化数据参数的基础上,再增加一些参数,即可开始进行测试了:

./sysbench --mysql-host=10.10.100.191 --mysql-port=8066 --mysql-user=test --mysql-password=test123 --mysql-db=TEST \
--test=tests/db/oltp.lua --oltp_tables_count=20 --oltp-table-size=1000000 --num-threads=8 --oltp-read-only=off \
--report-interval=20 --rand-type=uniform --max-time=600 --max-requests=0 --percentile=97 --oltp-skip-trx=on \
--mysql-ignore-errors=1062 run >> sysbench_oltpX_8_20180324.log

需要说明的是,在对类似mycat等中间件进行测试的时候,如果不加上参数 --oltp-skip-trx=on,则所有读写操作都会在主库进行。从库无法实现读分流。而加上该参数后,又会出现1062,duplicate key (重复主键)的问题,所以还要再加上一个参数--mysql-ignore-errors 。 两具参数配合使用。

五、结果解读

OLTP test statistics:
queries performed:
read: 268982 #总select次数
write: 76852 #总的写入次数
other: 0
total: 345834 # 读写总次数
transactions: 0 (0.00 per sec.) # 总事务数(每秒事务数)
read/write requests: 345834 (576.23 per sec.) # 读写总次数
other operations: 0 (0.00 per sec.) # commit、unlock tables以及其他mutex的数量
ignored errors: 0 (0.00 per sec.)
reconnects: 0 (0.00 per sec.) # 重连次数

General statistics:
total time: 600.1663s # 本次测试总耗时
total number of events: 19213 # mysql-event 次数,
total time taken by event execution: 4800.3787s 
response time:
min: 138.81ms
avg: 249.85ms #平均影响时长(去除一定比例最长响应时长后的平均值,由参数percentile决定)
max: 1391.54ms
approx. 97 percentile: 401.68ms

Threads fairness:
events (avg/stddev): 2401.6250/9.87
execution time (avg/stddev): 600.0473/0.04

使用sysbench 0.5 对mysql 进行性能、压力测试的更多相关文章

  1. MySQL常用配置和性能压力测试:MySQL系列之十五

    一.MySQL常用配置 以下所有配置参数以32G内存的服务器为基 1.打开独立的表空间 innodb_file_per_table = 1 2.MySQL服务所允许的同时会话数的上限,默认为151,经 ...

  2. (转)MySQL自带的性能压力测试工具mysqlslap详解

    mysqlslap 是 Mysql 自带的压力测试工具,可以模拟出大量客户端同时操作数据库的情况,通过结果信息来了解数据库的性能状况 mysqlslap 的一个主要工作场景就是对数据库服务器做基准测试 ...

  3. MySQL自带的性能压力测试工具mysqlslap

    mysqlslap是从MySQL的5.1.4版开始就开始官方提供的压力测试工具. 通过模拟多个并发客户端并发访问MySQL来执行压力测试,同时提供了较详细的SQL执行数据性能报告,并且能很好的对比多个 ...

  4. 数据库相关文章转载(2) MySQL自带的性能压力测试工具mysqlslap详解

    PS:今天一同事问我有木有比较靠谱的mysql压力测试工具可用.其实mysql自带就有一个叫mysqlslap的压力测试工具,还是模拟的不错的.下面举例说说.mysqlslap是从5.1.4版开始的一 ...

  5. (总结)MySQL自带的性能压力测试工具mysqlslap详解

    PS:今天一同事问我有木有比较靠谱的mysql压力测试工具可用.其实mysql自带就有一个叫mysqlslap的压力测试工具,还是模拟的不错的.下面举例说说.mysqlslap是从5.1.4版开始的一 ...

  6. 记在VMware虚拟机中对网站进行性能压力测试的经历

    由于本次测试,仅仅是对静态网站首页进行的测试,所以没有涉及到MySQL数据库的性能监测 服务器基本配置 webbench测试工具 Linux上一款优秀的web性能压力测试工具.webbench最多可以 ...

  7. JMeter工具接口性能压力测试分析与优化

    最近公司做的项目,要求对相关接口做性能压力测试,在这里记录一下分析解决过程. 压力测试过程中,如果因为资源使用瓶颈等问题引发最直接性能问题是业务交易响应时间偏大,TPS逐渐降低等.而问题定位分析通常情 ...

  8. 【转】Web性能压力测试工具之ApacheBench(ab)详解

    PS:网站性能压力测试是性能调优过程中必不可少的一环.只有让服务器处在高压情况下才能真正体现出各种设置所暴露的问题.Apache中有个自带的,名为ab的程序,可以对Apache或其它类型的服务器进行网 ...

  9. [AapacheBench工具]web性能压力测试工具的应用与实践

    背景:网站性能压力测试是性能调优过程中必不可少的一环.服务器负载太大而影响程序效率是很常见的事情,一个网站到底能够承受多大的用户访问量经常是我们最关心的问题.因此,只有让服务器处在高压情况下才能真正体 ...

随机推荐

  1. Android中高级工程师面试题

    https://www.cnblogs.com/huangjialin/p/8657565.html(存在不少答案错误,可参照知识点复习,答案不可全信)  上 https://www.cnblogs. ...

  2. ovs常用操作

    1.添加网桥:ovs-vsctl add-br 交换机名 2.删除网桥:ovs-vsctl del-br 交换机名 3.添加端口:ovs-vsctl add-port 交换机名 端口名(网卡名) 4. ...

  3. 第五节,K-近邻算法(KNN)

    收集数据——>准备数据——>分析数据——>训练算法——>测试算法——>使用算法 K-近邻算法: (1)计算已知类别数据集中的点与当前点之间的距离 (2)按照距离递增次序排 ...

  4. P4843 清理雪道

    题目地址:P4843 清理雪道 上下界网络流 无源汇上下界可行流 给定 \(n\) 个点, \(m\) 条边的网络,求一个可行解,使得边 \((u,v)\) 的流量介于 \([B(u,v),C(u,v ...

  5. linux 用户空间获得纳秒级时间ns【转】

    转自:https://www.cnblogs.com/kekukele/p/3662816.html 一.引言 我们在测试程序的性能的时候往往需要获得ns级的精确时间去衡量一个程序的性能,下面介绍下l ...

  6. 题解-POI2014 FAR-FarmCraft

    Problem bzoj权限题,洛谷上可提交 洛谷上的奇葩翻译不要看,很多条件缺漏 题意简述:给定一棵树,每条边权为1,给定所有点点权,每条边仅能走两次,求以一定顺序遍历整棵树后,使所有点中的到达时间 ...

  7. GetCheckProxy

    @echo off setlocal enabledelayedexpansion set infile=free.txt set url=https://www.google.com/?gws_rd ...

  8. vue路由vue-router的使用

    对于单页应用,官方提供了vue-router进行路由跳转的处理. 安装 基于传统,我更喜欢采用npm包的形式进行安装. npm install vue-router --save 当然,官方采用了多种 ...

  9. 制作ecc证书(linux命令行)

    生成ECC证书.Debian:/home/test# openssl ecparam -out EccCA.key -name prime256v1 -genkeyDebian:/home/test# ...

  10. 004_为什么不推荐APP使用SSL-PINNING

    背景 之前工作的经历,前面技术团队的APP使用了SSL-PINNING,服务器SSL证书到期前,测试环境更换证书,在更换配置OK后,发现APP停止服务了.所有的请求全部都失败. 后来查到是APP使用了 ...