JMeter JDBC请求Query Type实测(金仓数据库版)

文章目的

在实际性能测试中,JMeter的JDBC Request组件常用于模拟数据库操作。但许多用户对Query Type参数的具体行为存在疑惑。

本文将以金仓数据库KingbaseES 为例,通过实测验证每种Query Type的行为,帮助用户明确其使用场景和限制,避免因配置不当导致测试结果失真。


一、测试环境准备

  1. JMeter配置

    • JMeter 5.3
    • JDBC驱动:kingbase8-9.0.0.jar(放置于jmeter/lib/ext目录)
  2. 数据库配置

    • KINGBASE (KingbaseES) V009R001C002B0014

    • 测试表结构:

      sql 复制代码
      CREATE TABLE users (
        id SERIAL PRIMARY KEY,
        name VARCHAR(50),
        status VARCHAR(20) DEFAULT 'active'
      );
      insert into users(name) values ('user1');
      insert into users(name) values ('user2');
  3. JDBC连接配置

    • Variable Name : kingbase
    • Database URL : jdbc:kingbase8://192.168.17.12:54321/kingbase
    • JDBC Driver Class : com.kingbase8.Driver
    • 用户名/密码:根据实际填写

二、测试用例与实测过程

1. Select Statement
  • 测试目的
    验证执行多条SELECT语句时是否仅返回第一条结果。
  • 测试步骤
    1. 在JDBC Request中配置:
      • Query Type: Select Statement

      • SQL Query:

        sql 复制代码
        SELECT * FROM users WHERE status='active';  -- 表中有2条active数据  
        SELECT * FROM users WHERE status='deleted'; -- 表中有1条deleted数据  

        数据库查询结果

  1. 添加View Results Tree查看响应。

这里发现直接报错

删除查询语句后面的分号,只保留第1条查询语句

结果显示正常

后面如果再加sql语句,会因为没有分号报语法错误

结论 Select Statement仅可以执行一条SELECT语句


2. Update Statement
  • 测试目的
    验证执行多条DML语句时是否仅生效第一条。
  • 测试步骤
    1. 初始化数据:清空users表,插入一条数据:INSERT INTO users (name) VALUES ('test_user');

    2. 配置JDBC Request:

      • Query Type: Update Statement

      • SQL Query:

        sql 复制代码
        UPDATE users SET name='updated_user' WHERE id=1;  
        DELETE FROM users WHERE id=1;  

  1. 执行后检查数据库数据。
  • 执行结果

    • 语句全部执行成功
  • 结论
    Update Statement可以执行多条DML语句。


3. Callable Statement
  • 测试目的
    验证是否支持执行多语句或调用存储过程。
  • 测试步骤
    1. 创建PostgreSQL存储过程:
sql 复制代码
CREATE OR REPLACE PROCEDURE reset_users() AS 
BEGIN
UPDATE users SET name='default';  
DELETE FROM users WHERE status='deleted';  
END;   
复制代码
 2. 配置JDBC Request:  
    - Query Type: `Callable Statement`  
    - SQL Query:  
      ```sql
      call reset_users();  -- 调用存储过程  
      SELECT * FROM users;    -- 查询结果  

执行前数据

  1. 执行后检查数据库状态及响应数据。
  • 执行结果

    • 存储过程成功执行,所有用户name被重置为default
    • 响应数据中返回SELECT查询结果。
  • 结论
    Callable Statement支持多语句和存储过程调用。


4. Prepared Select Statement
  • 测试目的

    验证参数化查询是否生效,并支持重复执行。

  • 测试步骤

    1. 配置JDBC Request:
      • Query Type: Prepared Select Statement
      • SQL Query: SELECT * FROM users WHERE id=?;
      • Parameter Values: ${__Random(1,5)}
      • Parameter Types: INTEGER
    2. 使用${__Random(1,5)}动态生成id值,循环执行2次。
    3. 检查每次查询是否返回匹配结果。
  • 执行结果

    • 每次均能根据动态id值返回对应数据(若存在)。

  • 结论
    Prepared Select Statement支持参数化,提升重复查询性能。


5. Commit与Rollback
  • 测试目的

    验证手动提交与回滚事务的功能。

  • 测试步骤

    添加配置:

    第一个JDBC Request:AutoCommit(false)

    sql

    INSERT INTO users (name) VALUES ('temp_user');

    第二个JDBC Request:Rollback

    执行后检查数据库是否插入数据。

  • 执行结果

    执行后数据库无temp_user数据,回滚生效。

  • 结论

    通过Commit和Rollback可手动控制事务。


三、实测总结

Query Type 支持多语句 适用场景 注意事项
Select Statement 单次SELECT查询 仅首条生效
Update Statement ✔️ 多次INSERT/UPDATE/DELETE
Callable Statement ✔️ 存储过程、多语句操作 语法需符合数据库规范
Prepared Statement 参数化重复查询或更新 必须定义参数类型
Commit/Rollback - 手动事务控制 需先关闭AutoCommit

通过本次实测,可明确不同Query Type的行为差异。建议在性能测试中优先使用预编译语句(Prepared Statement)提升效率,并合理利用事务控制保证数据一致性。

相关推荐
ClouGence23 分钟前
CloudDM 支持达梦、KingbaseES、GoldenDB,国产数据库也能统一管起来
数据库·sql·开源
举个栗子。1 小时前
DBX:20MB 驾驭 90+ 种数据库的极简开源数据库管理器
数据库·开源
逃逸线LOF1 小时前
SpringMVC拦截器 & 异常处理机制
数据库·mysql
岁月失语唯石能言1 小时前
《 Web项目测试实战:博客系统的功能/接口/自动化/性能全流程测试报告》
自动化测试·功能测试·selenium·jmeter·接口测试·压力测试·性能测试
科技小登1 小时前
重大活动安全保障方案怎么选?重保服务、攻防演练、应急响应与安全意识培训实战与边界
数据库·人工智能·安全
番茄你个西红41 小时前
金仓KFS同步工具常见问题解决方法
数据库
CarIise1 小时前
JDBC数据库操作与SQL注入防范
数据库·sql
CCYe、2 小时前
新模型上线、旧模型下线:企业AI网关如何管住模型版本
java·网络·数据库·人工智能
疯狂打码的少年2 小时前
【数据库技术】SQL嵌套查询(IN/EXISTS/ANY/ALL)
数据库·笔记·sql
清晨0012 小时前
国产化数据库替代方案:openGauss 详解与 MySQL 平滑迁移实战
数据库·mysql