JMeter数据库性能测试指南:全面掌握基础操作

1.网络请求时间

2.数据库查询的时间

数据库性能指标

TPS:每秒事务数(一秒钟服务器处理的事务数,事务指,请求出去到响应回来的整个过程的时间)

QPS:每秒查询量(就是数据库每秒执行的SQL数量,包含insert/select/update/delete)

连接数(连接数是否释放)

查询缓存(不进行select,直接从缓存拿数据,缓存机制可以设置)

事务数的计算:Com_commit 提交次数(成功的事务) Com_rollback回滚次数(失败的事务)相加

QPS的计算 Questions / Uptime 即可得到的该指标的值

QPS查询:mysql>show global status like 'Questions';

mysql>show global status like 'Uptime'

数据库容易出现的问题:

1.连接池容易爆掉

2.慢查询

Jmeter需要一个插件才能连接数据库,一个mysql-connector-java-5.1.7-bin.jar包,放在apache-jmeter-4.0>lib>ext下即可

连接数据库第一步:

1."添加"-》"配置元件"-》"JDBC Connection Configuration"

QPS(Queries Per Second,每秒查询数)

TPS(Transactions Per Second,每秒处理事务数)

通过show status命令查看数据库运行状态,会有300多条状态信息记录,其中有几个值帮可以我们计算出QPS和TPS,如下:

Uptime:服务器已经运行的时间,单位秒

Questions:已经发送给数据库查询数

Com_select:查询次数,实际操作数据库的

Com_insert:插入次数

Com_delete:删除次数

Com_update:更新次数

Com_commit:事务次数

Com_rollback:回滚次数

计算方法:

1、基于Questions计算出QPS

mysql> show global status like 'Questions';

mysql> show global status like 'Uptime';

QPS = Questions / Uptime

2、基于Com_commit和Com_rollback计算出TPS:

mysql> show global status like 'Com_commit';

mysql> show global status like 'Com_rollback';

mysql> show global status like 'Uptime';

TPS = (Com_commit + Com_rollback) / Uptime

3、另一种QPS计算方式:

基于Com_select、Com_insert、Com_delete、Com_update计算出QPS:

mysql> show global status where Variable_name in('com_select','com_insert','com_delete','com_update');

等待1秒再执行,获取间隔差值,第二次每个变量值减去第一次对应的变量值,就是QPS。

4、另一种TPS计算方式:

mysql> show global status where Variable_name in('com_insert','com_delete','com_update');

计算TPS,就不算查询操作了,计算出插入、删除、更新四个值即可。

配置JDBC Request:

1、重要参数说明:

Variable Name:数据库连接池的名字,需要与JDBC Connection Configuration的Variable Name Bound Pool名字保持一致

Query:填写的sql语句未尾不要加";"

Parameter valus:参数值

Parameter types:参数类型,可参考:Javadoc for java.sql.Types

Variable names:保存sql语句返回结果的变量名

Result variable name:创建一个对象变量,保存所有返回的结果

Query timeout:查询超时时间

Handle result set:定义如何处理由callable statements语句返回的结果

配置JDBC Connection Configuration

(1) Variable Name Bound to Pool

Variable Name, 创建池的变量名 。这个变量在后面介绍的 JDBC Request 请求中用到。

(2) Connection Pool Configuration

Max Number of Connections 池中允许的最大连接数。在大多数情况下,将其设置为零(0),这意味着每个线程都将拥有自己的池,其中只有一个连接,即线程之间不共享连接。如果您真的想使用共享池,那么将 max count 设置为与线程数量相同,以确保线程不会彼此等待。

Max Wait (ms) 在连接池中取回连接最大等待时间

中文:如果在试图检索连接过程中(取回连接)超过所设置期限,连接池抛出一个错误

Time Between Eviction Runs (ms) 疏散时间

中文:在空闲对象驱逐线程运行期间,可以休眠的毫秒数。当非正值时,将运行无空闲对象驱逐器线程。(默认为"60000",1分钟)(如果当前连接池中某个连接在空闲了time Between Eviction Runs Millis时间后任然没有使用,则被物理性的关闭掉。)

Auto Commit 自动提交sql语句

中文:打开或关闭连接的自动提交。

原文:Turn auto commit on or off for the connections.

(3) Connection Validation by Pool

这是Jmeter用来检验数据库连接是否有效的一种机制,超过5秒没有使用的话,就会用validation query去测试下这个连接是否有效

Test While Idle 当空闲的时候测试连接是否断开

中文:测试连接池的空闲连接,验证查询将会被使用去测试。

原文:Test idle connections of the pool, see BasicDataSource.html#getTestWhileIdle . Validation Query will be used to test it.

Soft Min Evictable Idle Time(ms)

中文:最少的时间连接可能在池中闲置,然后才有资格被闲置的对象驱逐出去,额外的条件是至少在池中保持连接。默认值为5000(5秒)

Validation Query :验证查询 。一个简单的查询,用来确定数据库是否仍在响应。 这个验证查询在池创建中使用,即使"空闲测试"建议查询只在空闲连接上使用,也可以验证它。

验证查询的列表可以配置 jdbc.config.check。查询属性,默认情况下:

hsqldb:select 1 from INFORMATION_SCHEMA.SYSTEM_USERS

Oracle:select 1 from dual

DB2:select 1 from sysibm.sysdummy1

MySQL:select 1

Microsoft SQL Server (MS JDBC driver):select 1

PostgreSQL:select 1

Ingres:select 1

Derby:values 1

H2:select 1

Firebird:select 1 from rdb$database

(4) Database Connection Configuration

Database URL: jdbc:mysql://服务器地址:3306/数据库名

(比如:jdbc:mysql://ip:3306/数据库名?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true)

备注:"&allowMultiQueries=true" 这句话的意思呢 是为了在JDBC中执行多条select语句的时候用的!

JDBC Driver class:数据库JDBC驱动类名:com.mysql.jdbc.Driver

Username:数据库连接用户名

password:数据库连接密码

例如(上面url或class如有问题,可试一试下面的):

Database URL: jdbc:mysql://localhost:3306/information_schema?serverTimezone=GMT%2B8

JDBC Driver class: com.mysql.cj.jdbc.Driver

Username:root

password:xxx

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

相关推荐
khystal1 小时前
HUMS 2023齿轮箱数据分析
数据库·数据分析·信号处理
Warren981 小时前
Spring Boot 整合网易163邮箱发送邮件实现找回密码功能
数据库·vue.js·spring boot·redis·后端·python·spring
追逐时光者1 小时前
推荐 4 个不错的数据库设计工具,效率提升利器!
数据库
小张同学zkf3 小时前
【测试】基于博客系统的测试报告
python·功能测试·压力测试·测试
.Shu.4 小时前
Mysql InnoDB 底层架构设计、功能、原理、源码系列合集【五、InnoDB 高阶机制与实战调优】
数据库·mysql
新法国菜5 小时前
MySql知识梳理之DDL语句
数据库·mysql
DarkAthena6 小时前
【GaussDB】全密态等值查询功能测试及全密态技术介绍
数据库·gaussdb
ShawnLeiLei6 小时前
2.3 Flink的核心概念解析
数据库·python·flink
石皮幼鸟7 小时前
数据完整性在所有场景下都很重要吗?
数据库·后端
nightunderblackcat9 小时前
新手向:异步编程入门asyncio最佳实践
前端·数据库·python