一、基准测试简介 

1、什么是基准测试

数据库的基准测试是对数据库的性能指标进行定量的、可复现的、可对比的测试。

基准测试与压力测试

基准测试可以理解为针对系统的一种压力测试。但基准测试不关心业务逻辑,更加简单、直接、易于测试,数据可以由工具生成,不要求真实;而压力测试一般考虑业务逻辑(如购物车业务),要求真实的数据。

2、基准测试的作用

对于多数Web应用,整个系统的瓶颈在于数据库;原因很简单:Web应用中的其他因素,例如网络带宽、负载均衡节点、应用服务器(包括CPU、内存、硬盘灯、连接数等)、缓存,都很容易通过水平的扩展(俗称加机器)来实现性能的提高。而对于MySQL,由于数据一致性的要求,无法通过增加机器来分散向数据库写数据带来的压力;虽然可以通过前置缓存(Redis等)、读写分离、分库分表来减轻压力,但是与系统其它组件的水平扩展相比,受到了太多的限制。

而对数据库的基准测试的作用,就是分析在当前的配置下(包括硬件配置、OS、数据库设置等),数据库的性能表现,从而找出MySQL的性能阈值,并根据实际系统的要求调整配置。

3、基准测试的指标

常见的数据库指标包括:

  • TPS/QPS:衡量吞吐量。
  • 响应时间:包括平均响应时间、最小响应时间、最大响应时间、时间百分比等,其中时间百分比参考意义较大,如前95%的请求的最大响应时间。。
  • 并发量:同时处理的查询请求的数量。

二、sysbench

1、sysbench安装(ubuntu系统)

curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.deb.sh |sudo bash
sudo apt -y install sysbench

2、oltp测试

find / -name oltp.lua
sysbench --test=tests/db/oltp.lua(根据具体位置填写) --mysql-host=$hostip --mysql-port= --mysql-user=$user --mysql-password=$password --mysql-db=$databasename --oltp-test-mode=complex --oltp-tables-count= --oltp-table-size= --rand-init=on  prepare
sysbench tests/db/oltp.lua(根据具体位置填写) --mysql-host=$hostip --mysql-port=3306 --mysql-user=$user --mysql-password=$password --mysql-db=$databasename --oltp_tables_count=10 --oltp-table-size=10000000 --num-threads=10 --oltp-read-only=off --report-interval=10 --rand-type=uniform --max-time=1800  --max-requests=0 --percentile=99 run >> /root/sysbench.log

参数详解:

--test=tests/db/oltp.lua 指定测试的脚本

--oltp-test-mode=complex 执行模式,包括simple、nontrx和complex,默认是complex,complex模式下测试最全面,会测试增删改查,而且会使用事务。可以根据自己的需要选择测试模式。

--oltp-tables-count=10 测试的表数量,根据实际情况选择

--oltp-table-size 测试的表的大小

--rand-init=on 表示每个测试表都是用随机数据来填充的

--max-time run多少时间

--max-requests=0 表示总请求数为 0,因为上面已经定义了总执行时长,所以总请求数可以设定为 0;也可以只设定总请求数,不设定最大执行时长

--percentile 表示设定采样比例,默认是 95%,即丢弃1%的长请求,在剩余的99%里取最大值,即:模拟 对10个表并发OLTP测试,每个表1000万行记录,持续压测时间为 1小时。

--oltp-read-only=off 表示不要进行只读测试,也就是会采用读写混合模式测试

--report-interval=10 表示每10秒输出一次测试进度报告

prepare、run和cleanup,顾名思义,prepare是为测试提前准备数据,run是执行正式的测试,cleanup是在测试完成后对数据库进行清理。

3、测试结果

sysbench 0.5:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads:
Report intermediate results every second(s)
Random number generator seed is and will be ignored -- 线程启动
Threads started! -- 每10秒钟报告一次测试结果,tps、每秒读、每秒写、%以上的响应时长统计
[ 10s] threads: , tps: 524.19, reads/s: 7697.05, writes/s: 2143.56, response time: .46ms (%)
[ 20s] threads: , tps: 96.50, reads/s: 1351.01, writes/s: 373.30, response time: .49ms (%)
[ 30s] threads: , tps: 235.50, reads/s: 3297.01, writes/s: 946.90, response time: .47ms (%)
[ 40s] threads: , tps: 115.50, reads/s: 1617.00, writes/s: 491.40, response time: .75ms (%)
[ 50s] threads: , tps: 262.10, reads/s: 3669.41, writes/s: 1016.10, response time: .90ms (%)
[ 60s] threads: , tps: 121.50, reads/s: 1701.00, writes/s: 499.10, response time: .03ms (%)
[ 70s] threads: , tps: 201.40, reads/s: 2735.10, writes/s: 769.50, response time: .82ms (%)
[ 80s] threads: , tps: 204.70, reads/s: 2950.29, writes/s: 838.10, response time: .99ms (%)
[ 90s] threads: , tps: 118.40, reads/s: 1657.61, writes/s: 490.00, response time: .53ms (%) OLTP test statistics:
queries performed:
read: -- 读总数
write: -- 写总数
other: -- 其他操作总数(SELECT、INSERT、UPDATE、DELETE之外的操作,例如COMMIT等)
total: -- 全部总数 查询总数及qps
transactions: (174.94 per sec.) -- 总事务数(每秒事务数) 事务总数及tps
deadlocks: (0.00 per sec.) -- 发生死锁总数
read/write requests: (3148.86 per sec.) -- 读写总数(每秒读写次数)
other operations: (349.87 per sec.) -- 其他操作总数(每秒其他操作次数) General statistics: -- 一些统计结果
total time: .6152s -- 总耗时
total number of events: -- 共发生多少事务数
total time taken by event execution: .7227s -- 所有事务耗时相加(不考虑并行因素)
response time: -- 响应时间
min: .52ms -- 最小耗时
avg: .78ms -- 平均耗时
max: .51ms -- 最长耗时
approx. percentile: .01ms -- 超过99%平均耗时 Threads fairness: -- 线程的稳定性
events (avg/stddev): 2461.8320/34.60 -- 事件(平均值/偏差)
execution time (avg/stddev): 3601.1239/0.63 -- 执行时间(平均值/偏差)

4、清理测试数据

sysbench --test=tests/db/oltp.lua(根据具体位置填写) --mysql-host=databasehost --mysql-port= --mysql-user=user --mysql-password=password --mysql-db=databasename --oltp-test-mode=complex --oltp-tables-count= --oltp-table-size= --rand-init=on  cleanup

 

mysql基准测试与sysbench工具的更多相关文章

  1. 详解MySQL基准测试和sysbench工具

    前言 作为一名后台开发,对数据库进行基准测试,以掌握数据库的性能情况是非常必要的.本文介绍了MySQL基准测试的基本概念,以及使用sysbench对MySQL进行基准测试的详细方法. 文章有疏漏之处, ...

  2. 详解MySQL基准测试和sysbench工具(转)

    前言 作为一名后台开发,对数据库进行基准测试,以掌握数据库的性能情况是非常必要的.本文介绍了MySQL基准测试的基本概念,以及使用sysbench对MySQL进行基准测试的详细方法. 文章有疏漏之处, ...

  3. MySQL基准测试和sysbench工具

    参考https://www.cnblogs.com/kismetv/archive/2017/09/30/7615738.html 一.基准测试的作用 sysbench是一个开源的.模块化的.跨平台的 ...

  4. 解MySQL基准测试和sysbench工具

    前言 作为一名后台开发,对数据库进行基准测试,以掌握数据库的性能情况是非常必要的.本文介绍了MySQL基准测试的基本概念,以及使用sysbench对MySQL进行基准测试的详细方法. 文章有疏漏之处, ...

  5. MySQL基准测试(三)--开源工具与实例演示

    MySQL基准测试(三)--开源工具与实例演示 针对web应用 ab ab是一个Apache HTTP服务的基准测试工具. http_load http_load是一个针对Web服务器测试工具. JM ...

  6. mysql测试和sysbench工具详解

    前言 作为一名后台开发,对数据库进行基准测试,以掌握数据库的性能情况是非常必要的.本文介绍了MySQL基准测试的基本概念,以及使用sysbench对MySQL进行基准测试的详细方法. 文章有疏漏之处, ...

  7. MySQL基准测试工具--sysbench

    我们需要知道的是sysbench并不是一个压力测试工具,是一个基准测试工具.linux自带的版本比较低,我们需要自己安装sysbench. [root@test2 ~]# sysbench --ver ...

  8. 通过sysbench工具实现MySQL数据库的性能测试

    1.背景 sysbench是一款压力测试工具,可以测试系统的硬件性能,也可以用来对数据库进行基准测试.sysbench 支持的测试有CPU运算性能测试.内存分配及传输速度测试.磁盘IO性能测试.POS ...

  9. MySQL基准测试工具

    一.基准测试 基准测试(benchmark)是针对系统设计的一种压力测试. 基准测试是简化了的压力测试. 1.1 常见指标 TPS QPS 响应时间 并发量 1.2 收集与分析数据脚本 收集数据的sh ...

随机推荐

  1. bzoj 1497 [NOI2006]最大获利【最大权闭合子图+最小割】

    不要被5s时限和50000点数吓倒!大胆网络流!我一个5w级别的dinic只跑了1s+! 看起来没有最大权闭合子图的特征--限制,实际上还是有的. 我们需要把中转站看成负权点,把p看成点权,把客户看成 ...

  2. bzoj 4898: [Apio2017]商旅【Floyd+分数规划+二分】

    其实并不会分数规划 因为要最大化 ans=总收益/总路程 ,所以考虑二分答案,找到一条 ans<=总收益/总路程 的回路.先预处理出d(i,j)为(i,j)最短路,w(i,j)为在i买某个物品在 ...

  3. bzoj 1009: [HNOI2008]GT考试【kmp+dp+矩阵快速幂】

    看n和k的范围长得就很像矩阵乘法了 设f[i][j]表示到第i个位置的后缀最长匹配目标串的j位.转移的话显然是枚举0~9,然后选择f[i+1]中能被他转移的加起来,需要用到next数组.然后构造矩阵的 ...

  4. 洛谷 P2770 航空路线问题【最大费用最大流】

    记得cnt=1!!因为是无向图所以可以把回来的路看成另一条向东的路.字符串用map处理即可.拆点限制流量,除了1和n是(i,i+n,2)表示可以经过两次,其他点都拆成(i,i+n,1),费用设为1,原 ...

  5. Django中的cookie和session实现

    cookie from django.shortcuts import render, HttpResponse, redirect # 此装饰器的作用就是讲所有没有cookie验证的页面都需要验证后 ...

  6. BZOJ2333 棘手的操作

    Description ​ 有N个节点,标号从1到N,这N个节点一开始相互不连通.第i个节点的初始权值为a[i],接下来有如下一些操作: U x y: 加一条边,连接第x个节点和第y个节点 A1 x ...

  7. 题解报告:poj 3061 Subsequence(前缀+二分or尺取法)

    Description A sequence of N positive integers (10 < N < 100 000), each of them less than or eq ...

  8. 题解报告:hdu 2057 A + B Again

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2057 问题描述 我们的HDOJ必须有许多A + B问题,现在又有新的问题出现. 给你两个十六进制整数, ...

  9. magento CURD操作

    查询: $model = Mage::getModel('mynews/mynews'); $collection = $model->getCollection(); $collection- ...

  10. 452 Minimum Number of Arrows to Burst Balloons 用最少数量的箭引爆气球

    在二维空间中有许多球形的气球.对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标.由于它是水平的,所以y坐标并不重要,因此只要知道开始和结束的x坐标就足够了.开始坐标总是小于结束坐标.平面 ...