一、问题背景

在数据库性能测试场景中,测试人员常会遇到首次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逐步加压,可更精准地定位数据库性能瓶颈。

更多推荐