SQL压测工具 Jmeter

缘起

最近在优化一个慢请求,该请求一般人访问的话还可以,但是用户的访客多的情况下会很慢.

相关信息如下表格所示:

请求数 耗时 平均耗时 最长耗时 接口
997 232.4280 0.2331 5.4610 v1-whovme-who_view_me

最长耗时达到 5 秒半,这是不能够忍耐的.

经过分析请求的流程,发现在该请求中有多处循环查询的sql,更有甚者,在内层循环里进行内网接口调用!而这正是慢查询的根本原因.

针对这个优化方案是,将循环里面的查询语句提取出来整合成一个;至于内层循环的接口调用则更换另一种方案来处理,这里不在深入讨论.

sql 整合完之后,和原来的 sql 查询性能对比如下:

单个查询耗时 : 0.026 sec
整合查询耗时 : 0.036 sec

整体的查询性能,假设是有 20 次循环, 不考虑网络请求的损耗

单个查询耗时 0.026 * 20 = 0.52
整合查询耗时 0.036

两者相差 14 倍,合并查询优于多个查询 !

目前看来很顺利,但是这只是单个查询的情况,如果是并发查询的场景下,这个整合后的效果是不是依然良好呢?

整合后的查询语句,其所需要消耗的资源相对单个查询是有所增加的,所以可不能贸然更新上线,需要进行压力测试对比分析才行.

Jmeter

经过了前面的场景铺垫,终于到主角出场了.

Jmeter 是 Apache 提供的一款功能性比较全的性能测试工具,可以使用来对 HTTP / SQL / SOAP 等应用进行测试.

这里使用了 Jmeter 的 SQL 测试功能.

注意: 本文章相关操作对应的是 Ubuntu 16.04 的操作系统.

下载安装

到下载页面下载 Jmeter 安装文件 apache-jmeter-5.2.1.tgz

该文件下载之后不需要在编译安装,可以直接启动,启动命令是 ./bin/jmeter

但是要链接操作数据库的话,还是要下载文件 mysql-connector-java-5.1.48.tar.gz ,下载文件解压后,将 mysql-connector-java-5.1.48-bin.jar 拷贝到 Jmeter 文件目录的 ./lib/ 下,需要重启 Jmeter 应用才能生效.

配置

要完成 SQL 压力测试,需要进行如下配置才行:

  • 配置数据库链接
  • 配置需要压测的 SQL 语句
  • 配置结果查看方式

具体的配置操作可以参考这边文章,虽然界面有所区别,但也不影响理解操作

压力测试

配置完成后就可以进行测试了

测试信息
线上只读测试库进行的测试
并发用户数: 50
每个用户请求数: 3 次

即并发模拟 50 个用户进行 3 次查询

类型 请求次数 平均耗时(ms) 最小耗时(ms) 最大耗时(ms)
单个查询 150 349 10 1239
整合查询 150 348 48 1844

可以看出,语句进行整合之后,和原来的单个查询的并发能力相差并不大,可以按这方法进整合优.

最后

既然压力测试结果显示改写后的性能差别不大,那就可以淡定的优化上线了

本文作者: chenishr

本文标题:《SQL压测工具 Jmeter》

本文地址: https://blog.chenishr.com/?p=807

©版权所有,除非注明, 永在路上文章均为原创,转载请以链接形式注明出处和作者细信息。