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

相关推荐
有想法的py工程师17 分钟前
PostgreSQL【内核】 CBO 优化器的“早停下注”与数学模型失效分析
数据库·postgresql
冰暮流星34 分钟前
sql之计算
数据库·sql
dishugj1 小时前
HANA集群状态监控
数据库·系统架构
小蒜学长2 小时前
基于Java的公司采购系统的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端·公司采购系统
lee_tianbai2 小时前
Java SSM 电影票预定系统|完整前后端项目,开箱即用(源码分享)
java·开发语言·数据库
SM_YHJ2 小时前
RFID通道门禁与资产台账联动的自动登记技术实现方案
大数据·数据库·人工智能
PaperData2 小时前
2014-2024年省级居民消费结构升级
数据库
砚底藏山河2 小时前
python量化入门:多周期数据对齐统一时间轴
java·数据库·python·金融·maven
Java后端的Ai之路2 小时前
昇腾NPU显存管理避坑指南:从npu-smi输出精准识别空闲卡的底层逻辑与实战
服务器·网络·数据库·npu·大模型服务
禾小西2 小时前
05丨Redis 内存快照:宕机后,如何实现快速恢复?
数据库·redis·缓存