Mysql压力测试工具
1|0Mysql压力测试工具
1|1Mysqlslap简介
mysqlslap:来自于 mariadb 包,测试的过程默认生成一个 mysqlslap 的 schema, 生成测试表 t1,查询和插入测试数据,mysqlslap 库自动生成,如果已经存在则先删除。用–only-print 来打印实际的测试过程,整个测试完成后不会在数据库中留下痕迹 使用格式
mysqlslap 示例
mysqlslap 示例
语句
–concurrency=500,600 指定同时有 500 个和600客户端连接
--iterations 10 指定运行这些测试10次
--auto-generate-sql-add-autoincrement 代表对生成的表自动添加auto_increment列,从5.1.18版本开始
--engines=innodb 要测试innodb引擎,可以有多个,用分隔符隔开,如 --engines=myisam,innodb
–number-of-queries=10000 指定总的测试查询次数(并发客户端数 * 每个客户端的查询次数)
1|2sysbench简介
sysbench 是一个开源的、模块化的、跨平台的多线程性能测试工具,可以用来进行 CPU、内存、磁盘 I/O、线程、数据库的性能测试。目前支持的数据库有 MySQL、Oracle 和 PostgreSQL
Linux安装sysbench
安装方式有两种,一种是通过 yum/apt 等来安装,另一种自己下载源码包来安装,笔者这里采用的是 centos , 采用 yum 安装
- 通过yum安装如下
数据库测试用例准备
需要测试的是Mysql,我们需要在数据库上创建一个专门用来测试的库
通过 sysbench 创建 20 个测试表,每个表中创建 100 万数据,再通过 10 个线程对测试库发起访问,持续 5 分钟,对其进行压测
语句
全方位测试
综合读写测试
测试数据库的综合读写 TPS , 使用 oltp_read_write 模式
只读性能测试
测试数据库的只读性能,使用 oltp_read_only 模式
删除性能测试
测试数据库的删除性能,使用模式:oltp_delete模式
更新索引字段测试
测试数据库的更新索引字段的性能,使用模式:oltp_update_index
更改非索引字段测试
测试数据库中更新非索引字段的性能,使用模式:oltp_update_non_index
插入性能测试
测试数据库的数据插入性能,使用模式:oltp_insert
写入性能测试
测试数据库的写入性能,使用模式:oltp_write_only
清理数据
前面命令进行了各种测试,在测试完之后我们可以通过下面的 cleanup 命令来清除构建的测试数据
压测结果分析
通过上面的命令我们可以全方位的得到测试的结果,我们直接每个一秒输出一次结果,在控制台会输出类似下面的东西:
[ 200s ] thds: 10 tps: 1166.06 qps: 6979.26 (r/w/o: 0.00/3978.09/3001.17) lat (ms,95%): 24.83 err/s: 0.00 reconn/s: 0.00
解释一下其中的含义,首先 [200s] 表示这是在第 200 秒的时候输出的一段压测统计结果,其他字段如下:
- thds:10 : 表示当前有 10 个线程正在压测
- tps:1166.06 : 表示当前每秒执行了 1166.06个事务
- qps:6979.26: 表示当前每秒可以执行 6979.26 个请求
- (r/w/o: 0.00/3978.09/3001.17) : 表示在每秒 6979.26 个请求中,有 0 个读请求,3978.09 个写请求,3001.17 个其他请求,其实就是对 qps 的细化
- lat (ms,95%): 24.83:表示 95% 的请求的延迟都在 24.83 毫秒以下
- err/s: 0.00 reconn/s: 0.00:表示有 0 个请求失败,发生了 0 次的网络重连
在压测结束后会输出一个总的压测结果,如下
常用监控命令
- 在压测过程中我们要时刻关注服务器的 CPU 、磁盘 I/O 、网络负载等信息,一旦发现任何一个超出一定负荷,则不适合再继续加大线程数来压测了
- 一定要注意,压测的过程是要保证机器各项指标在正常范围内的最大负载,而不是我们不断的增大 sysbench 的线程数,不关系其他指标,这样即使机器每秒抗住了很高的 qps , 但是这时候的机器已经是满负荷运行了,内存,cpu,网络带宽等都几乎被打满,这种情况机器随时可能挂掉,这时候的测压就没有什么代表性了,因为你不可能在生产者让它达到这样的负荷
观察 CPU 的的负荷
- 在 Linux 下最常见的命令就是 top 命令,可以输出详细的情况,如下:
- 对于上面的输出,我们详细来分析一下,首先看第一行的输出

内存的使用情况
KiB Mem : 7990072 total, 124656 free, 1085436 used, 6779980 buff/cache
- 7990072total : 总的内存,差不多 8G
- 124656 free:当前可用内存,1G
- 1085436 used:已使用内存
- 6779980 buff/cache:用于 IO 缓冲的内存
磁盘 IO 检测
在检测 CPU 和内存使用的同时,我们还需要检测磁盘的使用状况,包括 IO 吞吐量,IOPS 等信息主要通过 dstat 命令来查看,如果系统没有装可以通过 yum install dstat
进行安装**执行`` dstat -d` 命令,可以看到如下:
上面显示的内存可以看到存储的 IO 吞吐量的详细数据,每秒读 19M 数据,每秒写 166K 的数据,这个吞吐量并不是很高,一般普通的机械硬盘可以到达上百 MB 的读写量
**查看 IOPS **
使用命令 dstat -r
来查看 IOPS 的情况
如上面结果可以看到,读写分别的 IOPS 的值,也就是说随即磁盘读取 / 写入每秒多少次,通常来说磁盘的读写每秒在两三百次是可接受的
网卡流量检测
通过 dstat -n
来查看网卡的具体流量情况
网卡每秒接收和发送的数据量。通常来说如果我们电脑是千兆网卡,那么每秒钟网卡的总流量也就在 100M 左右,甚至更低
1|3BENCHMARK简介
BENCHMARK 是 MySQL 中的内置函数,而不是针对数据库的基准测试工具。
这个函数的功能是用来测试数据库中特定表达式的执行时间的,基本语法结构是:
BENCHMARK (loop_count, expr),其中 loop_count 是循环次数,expr 是要循环的表达式。这个函数的返回值通常是 0,并且会在返回中附带一行来指出执行时间。
可以看到执行 500000000 次 2*3 一共用了 9.16 秒 //这个可以验证Mysql慢查询 其他不建议
__EOF__

本文链接:https://www.cnblogs.com/Jqazc/p/16808999.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具