PolarDB for PostgreSQL TPC-H 性能测试指南
概述
TPC-H 是业界广泛使用的数据库分析型场景性能测试标准。本文将详细介绍如何在 PolarDB for PostgreSQL 数据库上执行 TPC-H 测试,包括测试环境准备、数据生成、查询执行以及性能对比分析。
TPC-H 测试简介
TPC-H 是由 TPC(事务处理性能委员会)制定的一套决策支持基准测试,主要用于评估数据库系统在分析型查询场景下的性能表现。它包含:
- 8张具有业务含义的表
- 22条复杂的分析型查询语句
- 可扩展的数据量(Scale Factor)
测试结果通常以查询响应时间、吞吐量等指标来衡量数据库系统的分析处理能力。
测试环境准备
部署 PolarDB for PostgreSQL
我们提供两种部署方式:
1. Docker快速部署
docker pull polardb/polardb_pg_local_instance:11
docker run -it \
--cap-add=SYS_PTRACE \
--privileged=true \
--name polardb_pg_htap \
--shm-size=512m \
polardb/polardb_pg_local_instance:11 \
bash
2. 共享存储集群部署
对于生产环境或更复杂的测试场景,建议采用基于共享存储的集群部署方式,这能充分发挥 PolarDB 的分布式能力。
生成测试数据
使用 tpch-dbgen 工具生成测试数据:
git clone https://github.com/ApsaraDB/tpch-dbgen.git
cd tpch-dbgen
生成不同规模的数据集:
# 100MB规模数据
./build.sh --scale=0.1
# 1GB规模数据
./build.sh
工具支持的主要参数:
--scale: 数据规模(GB)--user: 数据库用户名--db: 数据库名--host: 数据库地址--port: 数据库端口
性能测试执行
PostgreSQL 单机并行查询
以Q18查询为例:
-- 设置并行度
SET max_parallel_workers_per_gather = 2;
-- 查看执行计划
\i finals/18.explain.sql
-- 执行查询
\i finals/18.sql
在1GB数据集上,单机并行查询耗时约80秒。
ePQ单机并行查询
PolarDB的弹性并行查询(ePQ)功能可以显著提升分析查询性能:
-- 启用ePQ
SET polar_enable_px = ON;
-- 设置表级并行度
ALTER TABLE lineitem SET (px_workers = 100);
-- 其他表类似设置...
-- 执行查询
SET polar_px_dop_per_node = 1;
\i finals/18.sql
不同并行度下的性能对比:
| 并行度 | 查询耗时 |
|---|---|
| 1 | 59.11s |
| 2 | 42.40s |
| 4 | 19.89s |
| 8 | 10.94s |
可以看到,随着并行度增加,查询性能呈线性提升趋势。
ePQ跨机并行查询
在真正的分布式环境中,ePQ可以跨多台机器并行执行查询,充分利用集群计算资源。部署方式与单机类似,但需要确保:
- 网络配置正确(建议MTU设置为9000)
- 存储节点可被所有计算节点访问
- 计算节点间网络延迟低
性能优化建议
- 合理设置并行度:根据集群规模和资源情况调整
polar_px_dop_per_node参数 - 内存管理:对于复杂查询如Q17/Q18,可能需要调整内存相关参数
- 统计信息:确保ANALYZE已执行,优化器能生成最佳执行计划
- 硬件配置:SSD存储、充足内存和CPU核心能显著提升性能
总结
通过TPC-H测试可以看出,PolarDB for PostgreSQL的ePQ功能能显著提升分析型查询性能。在8并行度下,Q18查询性能提升近8倍。对于大规模数据分析场景,PolarDB的分布式架构和弹性扩展能力使其成为理想的选择。
实际生产环境中,建议根据业务特点和数据规模进行更全面的性能测试和调优,以获得最佳性能表现。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



