35.PostgreSQL压测-tpcc和tpch

PostgreSQL压测-tpcc和tpch

TPCC

一、测试工具:BenchmarkSQL

PostgreSQL 社区公认的 TPC-C 工具是 BenchmarkSQL(基于 TPC-C 规范实现,支持权重配置、数据装载、压力测试和结果报告)

二、环境准备

1. 安装 Java 与 Ant

# 检查 Java 版本(需 1.8+)
java -version

# 安装 Ant(以 CentOS/RHEL 为例)
sudo yum -y install ant
# Ubuntu/Debian
sudo apt-get -y install ant

2. 获取 BenchmarkSQL

wget https://sourceforge.net/projects/benchmarksql/files/latest/download -O benchmarksql.zip
unzip benchmarksql.zip -d benchmarksql
cd benchmarksql

3. 安装 PostgreSQL JDBC 驱动

将 PostgreSQL JDBC 驱动(例如 postgresql-42.6.0.jar)复制到 benchmarksql/lib/postgres/ 目录下:

cp postgresql-*.jar lib/postgres/

4. 编译 BenchmarkSQL

在 benchmarksql 根目录执行:

ant

若编译成功,dist/ 目录下会出现 BenchmarkSQL-5.0.jar。

三、数据库准备

1. 创建测试数据库与用户

CREATE USER benchmarksql WITH ENCRYPTED PASSWORD 'benchmarksql_pwd';
CREATE DATABASE benchmarksql OWNER benchmarksql;

2. 调整 PostgreSQL 配置(postgresql.conf)

根据服务器内存与CPU修改关键参数(示例为 16GB 内存服务器):

shared_buffers = 4GB
effective_cache_size = 12GB
wal_buffers = 128MB
max_wal_size = 8GB
checkpoint_timeout = 30min
max_connections = 300
random_page_cost = 1.1         # 如果使用 SSD
effective_io_concurrency = 200 # SSD 下可提升并发

修改后重启 PostgreSQL。

四、配置交易权重与测试参数

在 benchmarksql/run/ 下创建专用配置文件,例如 tpcc_test.props:

cd run
cp props.pg tpcc_test.props
vi tpcc_test.props

文件内容如下(含你指定的权重):

# 数据库连接
db=postgres
driver=org.postgresql.Driver
conn=jdbc:postgresql://localhost:5432/benchmarksql
user=benchmarksql
password=benchmarksql_pwd

# 数据规模(仓库数,每个仓库约 100MB,10 仓约 1GB)
warehouses=100
# 数据加载时的并行线程数
loadWorkers=20

# 压力测试参数
terminals=50                   # 并发终端数(模拟用户数)
runMins=10                     # 测试时长(分钟)
runTxnsPerTerminal=0           # 0 表示按时长运行,非 0 按事务数
limitTxnsPerMin=0

# ★ 交易权重(必须加和为 100)
newOrderWeight=45
paymentWeight=43
orderStatusWeight=4
deliveryWeight=4
stockLevelWeight=4

# 结果输出
resultDirectory=my_results_%t  # %t 会替换为时间戳
osCollectorScript=./misc/os_collector_linux.py

权重说明:这五项对应 TPC-C 的五种事务,你设定的数值已严格按要求配制。工具会依此按比例模拟业务压力。

TPC-C 是针对联机交易处理系统(OLTP)进行测试的规范。使用一个商品销售模型对 OLTP 系统进行测试,其中包含五类事务:
- NewOrder:新订单的生成
- Payment:订单付款
- OrderStatus:最近订单查询
- Delivery:配送
- StockLevel:库存缺货状态分析
TPC-C 使用 tpmC 值(Transactions per Minute)来衡量系统最大有效吞吐量(Max Qualified Throughput,MQTh),其中 Transactions 以 NewOrder Transaction 为准,即最终衡量单位为每分钟处理的新订单数。

五、执行测试

步骤1:装载数据

cd benchmarksql/run
./runDatabaseBuild.sh tpcc_test.props

终端会显示每张表的创建及装载进度。截图要求:截取装载完成时显示的数据记录数(如 Warehouse loading complete 等)。

步骤2:运行基准测试

./runBenchmark.sh tpcc_test.props

运行时会输出各终端的事务执行情况,以及每 10 秒的 tpmTOTAL 统计。截图要求:截取最终输出的 Measured tpmTOTAL 及下面的性能明细表。

步骤3:查看完整报告

测试结束后,进入 my_results_* 目录,打开 index.html 或查看 data/ 下的 CSV 文件即可获得完整报告,其中包含每个事务的 tpm 和权重验证。

六、判定“通过”的标准

TPC-C 没有统一的“通过线”,但可以按行业惯例自定标准:

  • 权重校验:在报告或控制台 log 中确认五种事务的执行次数比例接近 45:43:4:4:4。
  • 性能基线
    • 在 100 仓、10 分钟、50 终端下,tpmTOTAL 建议 > 10,000(中等硬件)。
    • 更好的服务器(多核+NVMe)可达 30,000 ~ 100,000+。
  • 95% 响应时间约束:TPC-C 对 NewOrder 事务有详细响应时间要求,BenchmarkSQL 报告会列出 90% 和 95% 响应时间,一般要求 NewOrder 95%响应时间 < 5 秒。

如果你需要更严格的通过条件,可参考 TPC-C 官方规范的详细要求(如事务超时回滚限制等),但简单验证时以上即可。

TPCH

posted @ 2026-05-19 13:51  数据库小白(专注)  阅读(20)  评论(0)    收藏  举报