jmeter优化数据库测试中首次请求耗时较长问题
一、问题背景
在数据库性能测试场景中,测试人员常会遇到首次JDBC请求响应时间(Response Time)明显高于后续请求的现象。这是由于传统JDBC连接的建立需要经历TCP三次握手、数据库身份验证、上下文初始化等过程,通常需要50-300ms的时间开销。而后续请求复用已建立的连接时,响应时间会显著降低。
本文基于JMeter工具,通过JDBC Connection Configuration组件配置优化实现数据库连接池优化,有效解决首次请求耗时过长问题。
二、JDBC Connection Configuration详解
1. 组件配置路径
Test Plan > Thread Group > JDBC Connection Configuration
2. 核心参数说明
这里主要对连接池Connection pool Configuration参数做说明
| 字段 | 含义 |
|---|---|
| Max Number of Connections | 连接池最大连接数;做性能测试时,建议填 0;如果填了 10,则最大连接 10 个线程 |
| Max Wait(ms) | 在连接池中取回连接的最大等待时间,单位毫秒 |
| Time Between Eviction Runs(ms) | 线程可空闲时间,单位毫秒;如果当前连接池中某个连接在空闲了指定时间后仍未使用,则被物理性关闭 |
| Auto Commit | 自动提交 SQL 语句,例如修改数据库时,自动 commit |
| Transaction isolation | 事务隔离级别 |
| Preinit Pool | 是否立即初始化连接池 |
看一下默认值:

三、测试场景设计
1、JMeter配置
JMeter 5.5
JDBC驱动:kingbase8-9.0.0.jar(放置于jmeter/lib/ext目录)
数据库配置
使用金仓数据库,版本:KINGBASE (KingbaseES) V009R001C002B0014
2. 测试环境
JDBC连接配置
Variable Name: kingbase
Database URL: jdbc:kingbase8://192.168.80.31:54321/kingbase
JDBC Driver Class: com.kingbase8.Driver
用户名/密码:根据实际填写
3. 测试执行
# 基础表
create table tab1(id int primary key ,name varchar(40),age int,c text);
# 数据写入
insert into tab1 values(${num},'${__RandomString(32,azxsdcvfbghnmjkliuyttwq12453347,)}',18,now());

默认配置运行:
20并发,执行第1次

20并发,执行第2次

20并发,执行第3次

可以看出,90%line耗时在81-105ms
循环运行5次

请求最低耗时和最高耗时差距极大
3. 使用连接池进行优化

20并发执行1次,结果:

对比可以看出,通过立即初始化连接池配置后,聚合报告结果明显提升,90%line达到了6ms
循环运行5次

关键结论:
- 首次请求耗时从最高109ms降至13ms
-关键参数:Preinit Pool:立即初始化连接池如果为 False,则第一个 JDBC 请求的响应时间会较长,因为包含了连接建立的时间
四、总结
通过合理配置JMeter连接池参数,可显著降低首次数据库请求的延迟,同时提升整体测试场景的吞吐能力。建议在实际测试中根据具体数据库负载情况动态调整连接池参数,配合Stepping Thread Group逐步加压,可更精准地定位数据库性能瓶颈。
更多推荐



所有评论(0)