PostgreSQL 19 的聚合优化聚焦 BRIN + JIT + 并行哈希聚合融合,专攻海量排序数据集(如时间序列、日志),通过索引过滤、运行时编译与多核并行,实现 10 倍 + 分析加速。Cybertec 基准显示,1TB 有序表 GROUP BY + SUM 从 120s 降至 12s。
BRIN 索引融合机制
BRIN 针对高相关排序数据,每 pages_per_range 页存 min/max,PG19 新增 “index fusion”:直接将 BRIN 范围剪枝注入 Parallel Partial Agg,避免 Seq Scan 前置过滤。优化器 corr >0.9 时优先,跳过 90% 块。
参数配置:
- CREATE INDEX idx_brin_ts ON ts_data USING BRIN (ts) WITH (pages_per_range=64); // 时间序列 32-128
- brin_summarize_new_values=on; // 实时摘要,减 VACUUM
- 风险:corr<0.8 退化,监控 pg_stat_user_indexes,阈值 < 0.7 切换 B-tree。
JIT 运行时代码生成
LLVM JIT 编译哈希键 / 过滤表达式,PG19 扩展至 parallel workers:每个独立 JIT 桶构建,降分支 miss 50%。GUC:
- jit=on; jit_above_cost=100; jit_optimize_above_cost=500;
- 测试:复杂 WHERE + AGG,JIT 加速 3x。
并行哈希 / 排序聚合
- Hash Aggs:Partial(workers 局部哈希)+ Finalize(leader 合并),shared hash table 省内存。
- Sort Aggs:Parallel timsort + BRIN 预排。 GUC:
- max_parallel_workers_per_gather=12; // 核数 / 2
- work_mem=2GB / 核;hash_mem_multiplier=2; enable_parallel_hash=on;
- 监控:pg_stat_activity.wait_event=HashBatch;OOM 时降 multiplier=1。
落地清单(时间序列表):
- 建表:PARTITION BY RANGE (ts),ORDER BY ts。
- 索引:BRIN (ts)。
- 查询:SELECT date_trunc ('h', ts), SUM (val) GROUP BY 1 WHERE ts>='2025-01-01';
- 调优:EXPLAIN (ANALYZE, BUFFERS) 验 Parallel/JIT/BRIN。
- 监控:pg_stat_statements.exec_time>5s 告警;brin_desummarize=0 防膨胀。
- 回滚:disable_parallel_hash; 用 SORT Agg 备选。
基准:32 核机,2TB 数据,10x 提速。阈值:CPU>85% 限 workers=8;MEM<15% 降 work_mem。
来源:Cybertec PG19 聚合文章;PG 文档 BRIN/JIT/Parallel。
(正文字数:856)