当前位置: 首页 > article >正文

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
    • 测试表结构:
      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:
        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:
        UPDATE users SET name='updated_user' WHERE id=1;  
        DELETE FROM users WHERE id=1;  
        

在这里插入图片描述 在这里插入图片描述

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

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


3. Callable Statement
  • 测试目的
    验证是否支持执行多语句或调用存储过程。
  • 测试步骤
    1. 创建PostgreSQL存储过程:
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:  ```sqlcall reset_users();  -- 调用存储过程  SELECT * FROM users;    -- 查询结果  

在这里插入图片描述

执行前数据
在这里插入图片描述
3. 执行后检查数据库状态及响应数据。

  • 执行结果

    • 存储过程成功执行,所有用户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)提升效率,并合理利用事务控制保证数据一致性。

相关文章:

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

文章目的 在实际性能测试中,JMeter的JDBC Request组件常用于模拟数据库操作。但许多用户对Query Type参数的具体行为存在疑惑。 本文将以金仓数据库KingbaseES为例,通过实测验证每种Query Type的行为,帮助用户明确其使用场景和限制&#xff…...

【内部教程】ISOLAR-AB配置以太网栈|超详细实战版

目录 往期推荐 缩写与定义 关于系统描述(System Description) 1.1 EthCommunicationController 1.2 EthCommunicationConnector 1.2.1 Ports(端口) 1.3 EthPhysicalChannel(以太网物理通道) 1.3.1…...

哈希表和容器中添加元素的方法

push_back v.s. emplace_back: 两者都是在容器末尾添加元素的方法&#xff0c;但是push_back会创建临时对象并进行拷贝构造&#xff0c;而emplace_back是直接构造 //push_back std::vector<MyClass> vec1; MyClass obj1("Object1", 1);//创建一个obj1对象 ve…...

Nginx 核心功能

目录 一&#xff1a;正向代理 1&#xff1a;编译安装 Nginx &#xff08;1&#xff09;安装支持软件 &#xff08;2&#xff09;创建运行用户、组和日志目录 &#xff08;3&#xff09;编译安装 Nginx &#xff08;4&#xff09;添加 Nginx 系统服务 2&#xff1a;配置正…...

String.join()-高效字符串拼接

String.join-高效字符串拼接 前言一、基础用法&#xff1a;拼接数组或集合元素&#xff08;仅分隔符&#xff09;语法示例 1&#xff1a;拼接字符串数组示例 2&#xff1a;拼接集合元素注意事项 二、进阶用法&#xff1a;结合 Stream API 处理复杂场景示例 1&#xff1a;添加前…...

【Canvas与图标】圆角方块蓝星CSS图标

【成图】 120*120的png图标 大小图&#xff1a; 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>圆角方块蓝星CSS Draft1</…...

系统性能分析基本概念(5) : 何时开始性能分析

决定何时开始系统性能优化&#xff08;Performance Optimization&#xff09;需要根据系统状态、业务需求和资源可用性来判断。以下是触发性能优化的关键场景和时机&#xff0c;结合系统性能分析&#xff08;如DRAM读取吞吐量等&#xff09;的背景&#xff0c;保持简洁且实用&a…...

Python实现Web请求与响应

目录 一、Web 请求与响应基础 &#xff08;一&#xff09;Web 请求与响应的定义与组成 &#xff08;二&#xff09;HTTP 协议概述 &#xff08;三&#xff09;常见的 HTTP 状态码 二、Python 的 requests 库 &#xff08;一&#xff09;安装 requests 库 &#xff08;二…...

机器学习 day05

文章目录 前言一、模型选择与调优1.交叉验证2.超参数搜索 前言 通过今天的学习&#xff0c;我掌握了机器学习中模型的选择与调优&#xff0c;包括交叉验证&#xff0c;超参数搜索的概念与基本用法。 一、模型选择与调优 模型的选择与调优有许多方法&#xff0c;这里主要介绍较…...

CentOS Stream安装MinIO教程

1. 下载 MinIO 二进制文件 # 进入 MinIO 安装目录 sudo cd /usr/local/bin/# 下载 MinIO 二进制文件&#xff08;替换为最新版本链接&#xff09; wget https://dl.min.io/server/minio/release/linux-amd64/minio chmod x minio2. 创建专用用户和存储目录 # 创建 minio 用户…...

C#新建打开文件对话框

这是Winform直接封装好的打开文件对话框 using System.Windows.Forms; public static string OpenFile(string path) {OpenFileDialog openFileDialog new OpenFileDialog();// 设置对话框属性openFileDialog.Title "选择文件";openFileDialog.InitialDirectory …...

汇川PLC通过开疆智能Profinet转ModbusTCP网关读取西门子PLC数据案例

本案例是客户通过开疆智能Profient转ModbusTCP网关连接汇川PLC的配置案例 Modbus TCP主站即Modbus TCP客户端&#xff0c;Modbus TCP主站最多支持同时与31个Modbus TCP从站 。&#xff08;Modbus TCP服务器&#xff09;进行通信。 第一步设置PLC IP地址&#xff1b; 默认PLC…...

零基础入门:MinerU 和 PyTorch、CUDA的关系

&#x1f4a1;一句话总结&#xff1a;MinerU 是一个用 PyTorch 跑模型的程序&#xff0c;PyTorch 支持多种加速方式&#xff08;如 CUDA、MPS&#xff09;&#xff0c;让它跑得快就需要依赖这些加速工具。 PyTorch官网安装教程&#xff08;可根据系统情况选择不同版本&#xf…...

借助IEDA ,Git版本管理工具快速入门

01 引言 一直使用SVN作为版本管理工具&#xff0c;直到公司新来的一批同事&#xff0c;看到我们使用的SVN都纷纷吐槽&#xff0c;什么年代了&#xff0c;还使用SVN。聊下来&#xff0c;才知道人家公司早早就将SVN切成了Git工具&#xff0c;并吐槽SVN的各种弊端。 既然新的技术…...

三维空间,毫秒即达:RTMP|RTSP播放器在Unity中的落地实现

有人问我&#xff1a;在 Unity 里做超低延迟的直播播放&#xff0c;是什么感觉&#xff1f; 我说&#xff0c;是把一帧帧流动的时间&#xff0c;嵌进一个三维的空间里。 它不属于现在&#xff0c;也不属于过去。 它属于“实时”——属于那一秒内刚刚发生&#xff0c;却已被你看…...

【计算机网络】HTTP/1.0,HTTP/1.1,HTTP/2,HTTP/3汇总讲解,清晰表格整理面试重点对比

表格汇总 对比维度HTTP/1.0HTTP/1.1HTTP/2HTTP/3传输协议TCPTCPTCP/TLS&#xff08;默认加密&#xff09;UDP&#xff08;基于 QUIC 协议&#xff09;连接方式短连接&#xff08;每次请求/响应后断开&#xff09;引入持久连接&#xff08;Persistent Connection&#xff09;&a…...

ubuntu 搭建FTP服务,接收部标机历史音视频上报服务器

1.安装vsftpd 1.1.安装命令 sudo apt update sudo apt install vsftpd 1.2.备份原始配置文件 sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak 1.3.配置 vsftpd 编辑配置文件 /etc/vsftpd.conf&#xff1a; sudo vim /etc/vsftpd.conf 将以下参数修改为对应值&#xff…...

一、内存调优

一、内存调优 什么是内存泄漏 监控Java内存的常用工具 内存泄露的常见场景 内存泄露的解决方案 内存泄露与内存溢出的区别 内存泄露&#xff1a;在Java中如果不再使用一个对象&#xff0c;但是该对象依然在GC ROOT的引用链上&#xff0c;这个对象就不会被垃圾回收器回收&…...

IDEA启动报错:Cannot invoke “org.flowable.common.engine.impl.persistence.ent

1.问题 项目启动报错信息 java.lang.NullPointerException: Cannot invoke "org.flowable.common.engine.impl.persistence.ent 2.问题解析 出现这个问题是在项目中集成了Flowable或Activiti工作流&#xff0c;开启自动创建工作流创建的表&#xff0c;因为不同环境的数据…...

从加密到信任|密码重塑车路云一体化安全生态

目录 一、密码技术的核心支撑 二、典型应用案例 三、未来发展方向 总结 车路云系统涉及海量实时数据交互&#xff0c;包括车辆位置、传感器信息、用户身份等敏感数据。其安全风险呈现三大特征&#xff1a; 开放环境威胁&#xff1a;V2X&#xff08;车与万物互联&#xff0…...

Java的Filter与Spring的Interceptor的比较

一、技术规范与框架依赖 维度FilterInterceptor所属规范Servlet 规范&#xff08;Java EE 标准组件&#xff09;Spring MVC 框架组件&#xff08;非 Java EE 标准&#xff09;框架依赖不依赖 Spring&#xff0c;仅需 Servlet 容器&#xff08;如 Tomcat&#xff09;依赖 Sprin…...

多线程编程的典型使用场景

前言 在Java开发中&#xff0c;合理使用并发/多线程技术可以显著提升系统性能和资源利用率。本文将通过典型场景代码示例的形式&#xff0c;帮助开发者理解多线程的实际应用价值。 核心使用场景 2.1 高并发请求处理 场景描述&#xff1a; 电商秒杀、票务系统等需要同时处理大…...

grafana dashboard 单位 IEC SI a i

grafana dashboard 画图的时候在 Standard options —> Unit —> Data —> 会有各种选项其中列举以 xxxaxxx 、xxxixxx开头和&#xff08;IEC) (SI) 注释的&#xff0c;本文进行解释 其中带 a 的基于十进制的单位&#xff0c;使用1000作为基数。1 MB 1000 KB 1000 *…...

WPF···

设置启动页 默认最后一个窗口关闭,程序退出,可以设置 修改窗体的icon图标 修改项目exe图标 双击项目名会看到代码 其他 在A窗体点击按钮打开B窗体,在B窗体设置WindowStartupLocation=“CenterOwner” 在A窗体的代码设置 B.Owner = this; B.Show(); B窗体生成在A窗体中间…...

Git的工作流程

1) 初始化仓库&#xff1a;使用 git init 命令在目录中创建新Git仓库 2) 添加文件到暂存区&#xff1a; - git add <文件名> 添加指定文件 - git add . 添加所有修改文件 3) 提交改动&#xff1a;git commit -m "提交信息"&#xff08;注意commit正确拼写…...

微服务架构中的多进程通信--内存池、共享内存、socket

目录 1 引言 2 整体架构简介 3 疑问 3.1 我们的共享内存消息机制是用的posix还是system V 3.2 rmmt中&#xff0c;不同线程之间的比如访问同一个内存&#xff0c;用的什么锁控制的 3.3 疑问&#xff1a;假如一个进程发送给了另外两个进程&#xff0c;然后另外两个进程都同…...

电脑中所有word文件图标变白怎么恢复

电脑中的word文件图标变白&#xff0c;如下图所示&#xff1a; 解决方法&#xff1a; 1.winR-->在弹出的运行窗口中输入“regedit”(如下图所示)&#xff0c;点击确定&#xff1a; 2.按照路径“计算机\HKEY_CLASSES_ROOT\Word.Document.12\DefaultIcon”去找到“&#xff0…...

RK3568 OH5.1 源码编译及问题

安装编译器和二进制工具 在源码根目录下执行prebuilts脚本&#xff0c;安装编译器及二进制工具。 bash build/prebuilts_download.sh在源码根目录执行如下指令安装hb编译工具&#xff1a; python3 -m pip install --user build/hb使用build.sh脚本编译源码 进入源码根目录&…...

Qt5、C++11 获取wifi列表与wifi连接

一、获取wifi列表 .h 文件内容 #include <QWidget> #include <QVBoxLayout> #include <QPushButton> #include <QCheckBox> #include <QListWidget>class Setting : public QWidget {Q_OBJECT public:explicit Setting(QWidget *parent nul…...

【KWDB 2025 创作者计划】_从部署开始了解KWDB

一、概述 KaiwuDB 是一款面向 AIoT 场景的分布式、多模融合、支持原生 AI 的数据库产品&#xff0c;支持同一实例同时建立时序库和关系库并融合处理多模数据&#xff0c;具备时序数据高效处理能力&#xff0c;具有稳定安全、高可用、易运维等特点。面向工业物联网、数字能源、…...