[特殊字符] 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. 出报告

相关推荐
_oP_i5 分钟前
Another Redis Desktop Manager更新
数据库·redis·缓存
MC皮蛋侠客30 分钟前
SQLAlchemy 系列(三):声明式映射与 Schema——让类型、默认值和约束一致
数据库·python
石小千1 小时前
排查MongoDB慢日志问题
数据库·mongodb
leeyi1 小时前
Indexer + Retriever 源码:从 Eino 接口到 pgvector SQL(第73篇-E59)
postgresql·aigc·agent
安_1 小时前
如何为 RAG 项目选择向量数据库?Milvus、Pinecone、Chroma 怎么选?
数据库·milvus
lupai1 小时前
短信接口快速接入与调用实战指南
java·开发语言·数据库
snpgroupcn1 小时前
企业有必要做 SAP 数据归档吗?优势与价值分析
数据库·oracle
2601_965798472 小时前
Build a Consulting Site in 2026: Nifty Theme Practical Review
java·linux·数据库
倔强的石头1062 小时前
Spring Boot 接入金仓数据库:配置分层、启动自检与常见错误
数据库·spring boot·后端
汽车仪器仪表相关领域2 小时前
NHA-604/605汽车排放气体测试仪:00级国标计量|多动力车型兼容|移动/固定双工况|智能联网尾气检测设备
大数据·人工智能·功能测试·安全·汽车·压力测试·可用性测试