居尔钦·耶尔德勒姆·耶利内克:荷兰的Postgres周:PGDay Lowlands与Percona Live 2026

居尔钦·耶尔德勒姆·耶利内克:荷兰的Postgres周:PGDay Lowlands与Percona Live 2026

💡 原文英文,约1600词,阅读约需6分钟。
📝

内容提要

作者赴荷兰参加乌得勒支PGDay Lowlands和Percona Live两场会议,并做了五分钟闪电演讲,介绍ClickHouse维护的两个开源扩展:pg_clickhouse外部数据包装器,使现有Postgres查询可直接运行在ClickHouse上;pg_stat_ch将查询执行事件写入ClickHouse进行聚合分析。作者还听取了优化器提示、pg_tde等演讲,并分享了PostgreSQL 19的监控新特性,包括日志、WAL、WAIT FOR命令及新系统视图。

🔎

延伸解读

pg_clickhouse:让现有查询直接跑在ClickHouse上

pg_clickhouse是一个外部数据包装器,通过CREATE SERVER、USER MAPPING和IMPORT FOREIGN SCHEMA,将ClickHouse表映射为Postgres外部表。现有读查询、ORM和仪表板无需修改即可运行。当查询可下推时,Postgres规划器将整个查询发送到ClickHouse执行并返回聚合结果;否则部分下推,剩余在本地完成。目前TPC-H scale factor 1的22个查询中,有15个完全下推。

pg_stat_ch:为Postgres提供逐查询历史与真实百分位

pg_stat_ch将每次查询执行作为原始事件捕获,写入共享内存环形缓冲区,后台工作进程批量发送到ClickHouse进行聚合。它使用与pg_stat_statements相同的query_id,便于关联,但提供可按时间和应用切片的逐查询历史、真实百分位和错误跟踪。pg_stat_statements仅保留累积计数器,无法做到这些。设计上无背压:若ClickHouse缓慢或不可达,事件会被丢弃并计数,Postgres不会等待。

PostgreSQL 19监控新特性:日志、WAL与WAIT FOR

PostgreSQL 19在监控方面有多项改进:log_lock_waits默认开启,log_min_messages支持按进程类型设置不同级别,autoanalyze日志与autovacuum分离。WAL方面新增wal_fpi_bytes计数器,出现在pg_stat_wal、每后端统计、VACUUM/ANALYZE日志和EXPLAIN (ANALYZE, WAL)中。新增WAIT FOR命令,用于异步备库上的读己之写语义,并带有WAL写入、刷盘和重放阶段的等待事件。

优化器提示与计划稳定:PostgreSQL 19的新思路

Michael Banck的演讲讨论了PostgreSQL的优化器提示。除了enable_*参数和pg_hint_plan,PostgreSQL 19引入了Robert Haas的两个contrib模块:pg_plan_advice和pg_stash_advice。EXPLAIN (PLAN_ADVICE)输出描述计划的紧凑建议字符串,可通过pg_plan_advice.advice反馈以固定计划,pg_stash_advice按查询ID在共享内存中存储建议,自动应用并持久化。实现通过约束规划器而非替换它,因此只能

Q&A

PGDay Lowlands 和 Percona Live 2026 分别在哪里举办?

PGDay Lowlands 在荷兰乌得勒支的 TivoliVredenburg 音乐场地举办;Percona Live 2026 在阿姆斯特丹的 Mövenpick Hotel Amsterdam City Centre 举办。

pg_clickhouse 扩展的主要功能是什么?

pg_clickhouse 是一个外部数据包装器,它允许现有的 PostgreSQL 查询直接运行在 ClickHouse 上。通过创建服务器、用户映射并导入外部模式,ClickHouse 表会映射为 PostgreSQL 外部表,使得现有的读查询、ORM 和仪表板无需修改即可运行。

pg_stat_ch 扩展如何收集和存储查询执行事件?

pg_stat_ch 通过 PostgreSQL 钩子捕获每次查询执行作为原始事件(包括计时、缓冲区、WAL、CPU、错误、应用程序、客户端等信息),写入共享内存环形缓冲区,然后由后台工作进程通过原生协议批量发送到 ClickHouse 进行聚合分析。

PostgreSQL 19 在监控方面有哪些新特性?

PostgreSQL 19 的监控新特性包括:日志方面,log_lock_waits 默认开启,log_min_messages 支持按进程类型设置不同级别,新增 log_autoanalyze_min_duration 等;WAL 和 I/O 方面,pg_stat_wal 新增 wal_fpi_bytes 计数器,COPY 操作有独立等待事件;新增 WAIT FOR 命令用于异步备库的读己之写;新增系统视图 pg_stat_lock、pg_stat_recovery 和 pg_stat_autovacuum_scores;多事务和回卷方面,新增 pg_get_multixact_stats() 函数,XID 回卷警告阈值从 4000 万提高到 1 亿事务。

PostgreSQL 19 中新增的 pg_plan_advice 和 pg_stash_advice 模块有什么用途?

这两个模块用于计划稳定化。pg_plan_advice 允许通过 EXPLAIN (PLAN_ADVICE) 生成描述当前计划的建议字符串,并通过 pg_plan_advice.advice 反馈以固定计划;pg_stash_advice 将建议按查询 ID 存储在共享内存中,自动应用并能在重连和重启后保留。它们通过约束规划器而非替换规划器来工作,确保生成的计划是规划器原本会考虑的计划。

作者在 Percona Live 的演讲中提到了 PostgreSQL 19 的哪些日志相关改进?

日志相关改进包括:log_lock_waits 现在默认开启;log_min_messages 可以针对每种进程类型设置不同的日志级别;自动分析日志从自动清理中分离出来,通过 log_autoanalyze_min_duration 控制;来自远程服务器(通过复制、postgres_fdw 或 dblink)的消息现在格式与本地消息一致。

🏷️

标签

➡️

继续阅读