[特殊字符] PostgreSQL 数据库压力测试完整流程(JMeter版)

🚀 PostgreSQL 数据库压力测试完整流程(JMeter版)

使用 PostgreSQL + Apache JMeter


🧱 一、测试目标

本次压测用于验证:

  • ✔ 最大 TPS(吞吐量)

  • ✔ 系统瓶颈(CPU / DB / IO)

  • ✔ 响应时间稳定性

  • ✔ 并发极限


🧱 二、数据库准备

1️⃣ 建表

复制代码
CREATE TABLE orders (
    id SERIAL PRIMARY KEY,
    user_id INT,
    amount NUMERIC,
    created_at TIMESTAMP DEFAULT NOW()
);

2️⃣ 初始化数据

复制代码
INSERT INTO orders (user_id, amount)
SELECT floor(random()*1000), random()*100
FROM generate_series(1, 100000);

3️⃣ 建索引

复制代码
CREATE INDEX idx_orders_user_id ON orders(user_id);

⚙️ 三、JMeter准备

  • 安装 Apache JMeter

  • 添加 PostgreSQL JDBC 驱动(放 /lib)

    postgresql-42.x.x.jar


🧪 四、测试结构

复制代码
Test Plan
 ├── Thread Group
 │    ├── JDBC Connection Configuration
 │    ├── JSR223 PreProcessor(自动参数生成)
 │    ├── JDBC Request
 │    ├── Aggregate Report

🔗 五、数据库连接配置

复制代码
Variable Name: pgdb
JDBC URL: jdbc:postgresql://localhost:5432/testdb
Driver: org.postgresql.Driver
Username: postgres
Password: xxx
Max Connections: 50~200

🧵 六、压测模型(阶梯式)

阶段 线程数 时间
1 10 3 min
2 30 3 min
3 50 5 min
4 80 5 min
5 120 5 min

🧾 七、SQL测试场景

🔵 查询

复制代码
SELECT * FROM orders WHERE user_id = ?;

🟢 插入

复制代码
INSERT INTO orders (user_id, amount)
VALUES (?, ?);

🟡 混合

复制代码
SELECT amount FROM orders WHERE id = ?;
UPDATE orders SET amount = amount + 1 WHERE id = ?;

⚙️ 八、自动参数生成(核心)

在 JDBC Request 上添加:

👉 JSR223 PreProcessor(Groovy)

复制代码
int userId = (int)(Math.random() * 10000)
double amount = Math.round(Math.random() * 100 * 100.0) / 100.0

vars.put("user_id", String.valueOf(userId))
vars.put("amount", String.valueOf(amount))

🧾 JDBC 参数配置

INSERT:

复制代码
${user_id}, ${amount}

参数类型:

复制代码
INTEGER, DOUBLE

🎯 九、JDBC Request 设置

SQL类型 设置
SELECT Select Statement
INSERT Update Statement
UPDATE Update Statement

📊 十、执行压测

复制代码
jmeter -n -t test.jmx -l result.jtl

📈 十一、生成报告

复制代码
jmeter -g result.jtl -o report

📊 十二、核心指标

  • TPS(吞吐量)

  • 平均响应时间

  • 95线延迟

  • 错误率


🔥 十三、找性能极限方法

逐步加压:

  • TPS增长 → 正常

  • TPS停止增长 → 达瓶颈

  • 延迟暴涨 → 临界点

  • Error出现 → 超载


🧠 十四、TPS公式

TPS = \frac{\text{总请求数}}{\text{测试时间(秒)}


🏁 十五、总结

完整流程:

  1. 建表 + 数据 + 索引

  2. 配 JMeter JDBC

  3. 写 SQL

  4. 自动生成参数(JSR223)

  5. 阶梯加压

  6. 记录 TPS

  7. 找瓶颈

  8. 出报告

相关推荐
captain37633 分钟前
MyBatis(入门5)其他查询操作
java·数据库·spring boot·mybatis
小此方1 小时前
Re:Mysql数据库基础篇(八):详细讲解复合查询、多表查询、自连接、多行、多列子查询与合并查询
数据库·mysql
xszivvvv2 小时前
Mariadb数据库frm文件异常,如何恢复数据
数据库·mariadb
smile_life_2 小时前
MySQL 设置 防止账户被暴力破解
数据库·mysql
ShineWinsu2 小时前
对于Qt:QRadioButton常见属性以及QButtonGroup的解析
数据库·c++·qt·microsoft·gui·qradiobutton·qbuttongroup
测试盐3 小时前
oracle数据库卡顿排查
数据库·oracle
滕州市燕猫虎计算机科技工作室个体工商户3 小时前
MySQL、MVCC、多版本并发控制
数据库·mysql·mvcc·数据库事务
明航咨询-陈老师3 小时前
ITSS运行维护服务能力成熟度认证技术纵深:标准模型、等级路径、2026审核趋势与CS/CMMI对比
服务器·数据库·cmmi
缓慢更新4 小时前
AI 辅助生成单测:从接口定义到用例的流水线
java·服务器·前端·网络·数据库·人工智能
AI小百科4 小时前
向量数据库:AI 的「记忆仓库」是怎么工作的
数据库·人工智能·oracle