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 官方规范的详细要求(如事务超时回滚限制等),但简单验证时以上即可。

浙公网安备 33010602011771号