一、前言

在前面的压力测试过程中,主要关注的是对接口以及服务器硬件性能进行压力测试,评估请求接口和硬件性能对服务的影响。但是对于多数Web应用来说,整个系统的瓶颈在于数据库。

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

二、常见的数据库压测指标


与接口压测指标类似,数据库相关指标如下:

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

三、使用sysbench进行数据库压测

1、基本介绍

sysbench是跨平台的基准测试工具,支持多线程,支持多种数据库;主要包括以下几种测试:

cpu性能
磁盘io性能
调度程序性能
内存分配及传输速度
POSIX线程性能
数据库性能(OLTP基准测试)
该工具可以自动帮你在数据库里构造出来大量的数据,你想要多少数据,就自动给你构造出来多少条数据。同时还可以模拟几千个线程并发的访问数据库,模拟使用各种各样的 SQL 语句,包括模拟出来各种事务提交到你的数据库里去,甚至可以模拟出几十万的 TPS 去压测数据库。
2、安装sysbench:

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

sudo yum -y install sysbench

sysbench --version

3、基于 sysbench 构造测试表和测试数据:

首先需要在自己的数据库里创建好一个测试库,我们可以取个名字叫做 test,同时创建好对应的测试账号,可以叫做 root,密码是 123456,让这个用户有权限可以访问 test。
基于 sysbench 构建 20 个测试表,每个表里有 100 万条数据,接着使用 100 个并发线程去对这个数据库发起访问,连续访问 5 分钟,也就是 300 秒。命令如下:
sysbench --db-driver=mysql --time=300 --threads=100 --report-interval=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root --mysql-password=123456 --mysql-db=test --tables=20 --table_size=1000000 oltp_read_write --db-ps-mode=disable prepare
4、执行测试:

(1)测试数据库的综合读写 TPS,使用的是 oltp_read_write 模式:

sysbench --db-driver=mysql --time=300 --threads=100 --report-interval=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=test_user --mysql-password=test_user --mysql-db=test_db --tables=20 --table_size=1000000 oltp_read_write --db-ps-mode=disable run

(2)测试数据库的只读性能,使用的是 oltp_read_only模式:

sysbench --db-driver=mysql --time=300 --threads=100 --report-interval=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=test_user --mysql-password=test_user --mysql-db=test_db --tables=20 --table_size=1000000 oltp_read_only --db-ps-mode=disable run

(3)测试数据库的写入性能,使用的是 oltp_write_only 模式:

sysbench --db-driver=mysql --time=300 --threads=100 --report-interval=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=test_user --mysql-password=test_user --mysql-db=test_db --tables=20 --table_size=1000000 oltp_write_only --db-ps-mode=disable run

使用上面的命令,sysbench 工具会根据你的指令构造出各种各样的 SQL 语句去更新或者查询你的 20 张测试表里的数据,同时监测出你的数据库的压测性能指标,最后完成压测之后,可以执行 cleanup 命令,清理数据。

如果对软件测试有兴趣,想了解更多的测试知识,解决测试问题,以及入门指导,帮你解决测试中遇到的困惑,我们这里有技术高手。如果你正在找工作或者刚刚学校出来,又或者已经工作但是经常觉得难点很多,觉得自己测试方面学的不够精想要继续学习的,想转行怕学不会的, 都可以加入我们810119819,群内可领取最新软件测试大厂面试资料和Python自动化、接口、框架搭建学习资料!

5、压测结果分析:

按照我们上面的命令,我们是让它每隔 1 秒都会输出一次压测报告的,此时它每隔一秒会输出类似下面的一段东西:

[ 10s ] thds: 100 tps: 500 qps: 5000 (r/w/o: 3500/1000/500) lat (ms, 95%): 20 err/s: 0.00 reconn/s: 0.00

thds:100,这个意思就是有 100 个线程在压测
tps:500,这个意思就是每秒执行了 500 个事务
qps:5000,这个意思就是每秒可以执行 5000 个请求
(r/w/o: 3500/1000/500):这个意思就是说,在每秒 5000 个请求中,有 3500 个请求是读请求,1000 个请求是写请求,500 个请求是其他的请求,就是对 QPS 进行了拆解
lat (ms, 95%):20,这个意思就是说,95% 的请求的延迟都在 20 毫秒以下
err/s: 0.00 reconn/s: 0.00:这两个的意思就是说,每秒有 0 个请求是失败的,发生了 0 次网络重连

结束语

使用sysbench工具可以直接对数据库性能进行评价,但是在结果展示方面还有待进一步提升。当然后续可以对结果进行进一步处理,比如写入表格或作图,会更加直观。

数据库压力测试方法小结相关推荐

  1. benchmarksql测试mysql_数据库压力测试工具 -- BenchmarkSQL 使用说明

    关于数据库的压力测试,之前写过3篇Blog: 数据库基准测试(Database Benchmarking) 说明 数据库压力测试工具 -- Hammerdb 使用说明 数据库压力测试工具 -- Swi ...

  2. 【软件测试】黑盒测试方法小结

    黑盒测试方法小结 1.等价类划分法 一个程序可以有多个输入,等价类划分就是将这些输入数据按照输入需求进行分类,将它们划分为若干个子集,这些子集即为等价类(某个输入域的子集合),在每个等价类中选择有代表 ...

  3. sysbench-系统、数据库压力测试工具

    sysbench是一款简单易用的压力测试工具,可以测试cpu,memory,fileio,mysql数据库; sysbench安装方法: 默认的epel源中的sysbench是0.4版本的,现在已经到 ...

  4. 服务总线yali测试_服务器的压力测试方法与流程

    本发明涉及服务器的测试技术领域,特别是涉及一种包括超路径互联总线的服务器的压力测试方法. 技术背景 QPI(Quick Path Interconnect,快速通道互联)总线技术是一种取代前端总线(F ...

  5. mysql atlas 实现读写分离分担数据库压力

    mysql 读写分离都是在mysql cmake 和 mysql master,slave 基础上的服务,如果你还不太了解mysql 主从 或者mysql cmake 安装的话,可以先看看我之前的博客 ...

  6. 降低数据库压力的方法

    1.合理增加索引 表索引可以加快对表中数据的检索速度,但是会降低表中数据的更新速度,所以增加表的索引一定控制在合理范围内,过多的索引不但不会降低数据库的压力,反而可能增大数据库的压力,表索引的建立一般 ...

  7. 业务应用数据库压力过大解决方案

    业务应用数据库压力解决方案 引言 一.原因分析 二.在代码层面消化数据库压力 创建索引 转移压力 三.给数据库请个保姆--中间件 Redis MQ 四.忍法--数据库分身术 分布式架构 主从读写分离架 ...

  8. 项目优化:当使用redis减少数据库压力时,遇到redis写入失败,造成读取数据问题的解决方案

    场景: 我们项目用到了mq,有一个专门的服务在跑异步任务去发mq,这个mq的数据不是从数据库里面查的,而是从redis里面取的,之所以这么做,有两个原因: 1.使用redis减少数据库的压力: 2.本 ...

  9. 免费的系统压力测试方法/工具有哪些?企业如何做好软件压力测试

    对于很多企业测试人员来说,在做软件压力测试工作时,压力测试方法/工具不在乎多与少,而在于是否能够满足自己的产品检测需求,能够派上用处的压力测试工具就是好工具.那么好用的压力测试方法/工具有哪些,企业如 ...

最新文章

  1. arm中断保护和恢复_ARM中断异常处理的返回
  2. R语言PCA主成分分析(Principle Component Analysis)实战1
  3. k8s问题 CrashLoopBackOff
  4. Java如何加载类的呢?
  5. Zookeeper集群安装Version3.5.1
  6. 维基百科(wikipedia)数据下载(含地理数据)
  7. 字符串:1.存储结构
  8. Android OkHttp经验小结
  9. 使用 Redis 实现自动补全功能
  10. IT书籍汇总下载(python_c++_java_android_网络安全)等-持续更新
  11. vim打开bin文件
  12. 580刷590bios_身价瞬间涨几百 RX 480刷bios变身RX 580
  13. 拷贝出师表到另一个文件,恢复顺序
  14. LeetCode.No5——最长回文子串
  15. Hellow Python之打包 exe 文件超级试错
  16. Axure的基本原件
  17. 微信小程序学习(三):在微信开发者工具中,使用WeUI前端美化框架,微信小程序
  18. mysql根据分隔符将一行数据拆分成多行数据
  19. Prometheus监控系列--“普罗米修斯“ 入门 | 初识 | 简述 | 超详细
  20. 项目经理和产品经理哪个更有前途?

热门文章

  1. 计算椭球面平行投影的轮廓线方程及其面积
  2. 游戏Flappy Bird走红启示:没人知道玩家想要什么
  3. 震撼,愿所有中国人,都能听到这篇演讲!
  4. css上下左右居中得几种方法
  5. Java实现复杂excel格式导出
  6. 服务器招投标项目验收,信息化系统项目测试验收方案..docx
  7. Office Online Server概述
  8. 阿里数据中台七年演化史——行在口述干货
  9. 处理网页视频中的字幕
  10. 77.组合 回溯 队列 剪枝 python