使用 JMeter 进行数据库测试

2025/09/01 更新 1 次 更新于 2026/08/08 JMeter 共 2518 字,约 8 分钟

JMeter 可以通过其自带的 JDBC Request 取样器,很方便地对各种关系型数据库进行压力测试,简单来说 JMeter 会模拟大量用户同时执行 SQL 语句,以此来衡量数据库在不同负载下的性能表现。

1、环境准备

下载数据库的 JDBC 驱动 jar 包:

数据库驱动程序类JDBC
MySQLcom.mysql.jdbc.Driverjdbc:mysql://host:3306/DBname
PostgreSQLorg.postgresql.Driverjdbc:postgresql://host:5432/DBname
Oracleoracle.jdbc.driver.OracleDriverjdbc:oracle:thin:@//host:1521/DBname
MSSQLcom.microsoft.sqlserver.jdbc.SQLServerDriverjdbc:sqlserver://host:1433;databaseName=DBname
达梦dm.jdbc.driver.DmDriverjdbc:dm://host:5236
  • 将数据库 JDBC 驱动 jar 包复制到 Jmeter 的 lib 目录下

  • 或者在测试计划中手动添加 jar 包

image-20250901145242744

2、配置连接

线程组添加配置元件:JDBC Connection Configuration

image-20250901145641979

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

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

Max Wait(ms):在试图检索连接的过程中超过了超时时间,则池会抛出一个错误 。

Time Between Eviction Runs (ms):在被逐出的时间间隔(ms)。在空闲对象驱逐线程之间运行的毫 秒数。当非正的时候,就不会运行无用的对象驱逐线程(默认为 “60000”,1 分钟) 。

Auto Commit:将自动提交或关闭连接到连接上 。

transaction isolation:事务隔离 。这个默认即可,具体用法暂时还没有研究过,会的可以分享一下。

Test While Idle:测试池的空闲连接 ,后面的验证查询将用于测试它。

Soft Min Evictable Idle Time(ms):软 Min 可驱逐空闲时间(ms) 。在它有资格被闲置的对象驱 逐者强制驱逐之前,一个连接可能闲置在池中,并且至少在池中存在空闲连接的额外条件,默认值为 5000(5 秒) 。

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

Database URL:数据链接 url,格式:jdbc:mysql://localhost:3306/host 注释:数据库的 ip 地址+端口/数据库名(查询数据库端口号 show global variables like ‘port’) jdbc:mysql://127.0.0.1:3306/mydb2?serverTimezone=UTC&allowMultiQueries=true

JDBC Driver class:JDBC 驱动程序类 。MySql 选择 com.mysql.jdbc.Driver

Username:连接数据库的用户名。

Password:连接数据库的密码。

线程组添加取样器:JDBC Request,变量引用和 http 请求相同

SELECT id, name from public.sys_user WHERE id = '${userId}'

image-20250901150413393

Query Type:用于指定要执行的SQL查询类型

  • select statement:只支持单条查询,只支持第一条数据查询
  • updata statement:同时新增支持和修改语句,支持多条语句,但是 select 只能放最后一行
  • Callable Statement:执行一个 SQL 存储过程或函数
  • Prepared Select Statement:执行一个预编译的 SQL SELECT 查询,用于从数据库中检索数据。
  • Prepared Update Statement:执行一个预编译的SQL UPDATE查询,用于修改数据库中的数据。

Query:用于输入要执行的SQL查询语句

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

Query:填写要被执行的 SQL 语句

Parameter valus:参数值

Parameter types:参数类型

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

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

Query timeout:查询超时时间

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

3、发起请求

配合线程组来设置并发用户数,再添加相应的监听器来查看测试结果。

后续也可以使用 JMeter 连接数据库以创建、清理相应的测试数据

image-20250901150008054

Search

    Table of Contents