JMeter 可以通过其自带的 JDBC Request 取样器,很方便地对各种关系型数据库进行压力测试,简单来说 JMeter 会模拟大量用户同时执行 SQL 语句,以此来衡量数据库在不同负载下的性能表现。
1、环境准备
下载数据库的 JDBC 驱动 jar 包:
- MySQL:https://downloads.mysql.com/archives/c-j/,Operating System 选择
Platform Independent - PostgreSQL:https://jdbc.postgresql.org/download/
- Oracle:https://www.oracle.com/database/technologies/appdev/jdbc-downloads.html
- MSSQL:https://learn.microsoft.com/zh-cn/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server
- 达梦:https://eco.dameng.com/download/
| 数据库 | 驱动程序类 | JDBC |
|---|---|---|
| MySQL | com.mysql.jdbc.Driver | jdbc:mysql://host:3306/DBname |
| PostgreSQL | org.postgresql.Driver | jdbc:postgresql://host:5432/DBname |
| Oracle | oracle.jdbc.driver.OracleDriver | jdbc:oracle:thin:@//host:1521/DBname |
| MSSQL | com.microsoft.sqlserver.jdbc.SQLServerDriver | jdbc:sqlserver://host:1433;databaseName=DBname |
| 达梦 | dm.jdbc.driver.DmDriver | jdbc:dm://host:5236 |
将数据库 JDBC 驱动 jar 包复制到 Jmeter 的 lib 目录下
或者在测试计划中手动添加 jar 包

2、配置连接
线程组添加配置元件:JDBC Connection Configuration

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}'

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 连接数据库以创建、清理相应的测试数据

- 本文作者:Nine
- 本文链接:https://blog.nine.gt.tc/2025/09/01/jmeter-jdbc-test/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)