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

相关推荐
风哥2号1 小时前
数据库教程FGMT43‑MySQL性能分析与优化调整
数据库·mysql
随身数智备忘录2 小时前
财务数据分析如何与业务场景结合?财务数据分析如何从数出有据到数出有用?
数据库
这个DBA有点耶3 小时前
数据库教程:从零基础到实战的完整学习路径(2026版)
数据库·程序员·代码规范
forestsea3 小时前
从零构建 Java 智能体 RAG 系统:Milvus 向量数据库实战指南
java·数据库·milvus
probex_4 小时前
从 ByConity 到 VictoriaMetrics:一次指标数据迁移引发的四种存储对比
数据库
Patrick在香港5 小时前
Python 审计香港开放数据目录:两个端点差 10 倍,只有 9.3% 的资源标了「最后修改时间」
开发语言·数据库·python·数据分析·api·数据治理·开放数据
这个DBA有点耶5 小时前
自增主键用尽了怎么办?INT溢出、在线迁移与预防策略全解析
数据库·mysql·代码规范
老纪的技术唠嗑局5 小时前
Agent 习惯性删库跑路,数据库纷纷学 Git 续命
数据库·人工智能
Data_Journal5 小时前
使用 AutoScraper 进行网页抓取:分步教程
大数据·开发语言·数据库·python·scrapy
白远山6 小时前
健身场馆无人自动化解决方案:从架构到落地实践
java·开发语言·数据库·数据挖掘·需求分析