PostgreSQL 19 用 RDTSC 降低计时开销
PostgreSQL 19 换掉了 EXPLAIN ANALYZE 的取时方式。pganalyze 的 Lukas Fittl 解释,旧的 RDTSCP 指令会阻塞并发执行,5000 万行的 COUNT(*) 开计时要 4200 毫秒、不开只要 1900 毫秒。19 改用不阻塞的 RDTSC,平均计时开销从 5–10% 降到 2–3%,并新增 timing_clock_source,x86-64 上默认走 TSC。
pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
当天收录 20 条。
PostgreSQL 19 换掉了 EXPLAIN ANALYZE 的取时方式。pganalyze 的 Lukas Fittl 解释,旧的 RDTSCP 指令会阻塞并发执行,5000 万行的 COUNT(*) 开计时要 4200 毫秒、不开只要 1900 毫秒。19 改用不阻塞的 RDTSC,平均计时开销从 5–10% 降到 2–3%,并新增 timing_clock_source,x86-64 上默认走 TSC。
Jeremy Schneider 复盘了把 autovacuum_vacuum_cost_delay 设成 0 的后果。归零等于关掉成本控制,autovacuum 全速运行,靠提示位刷出大量脏页,WAL 量随之暴涨。现场表现是 COMMIT 上 IPC:SyncRep 等待激增,一张只做 INSERT 的 40GB 表里出现连片 FPI_FOR_HINT。改回默认的 2 毫秒后波动收敛,复制延迟和应用延迟都回落。
Richard Yen 讲解怎么用 pg_stat_activity 的 wait_event_type 与 wait_event 两列读懂后端卡在哪里,重点是保护共享缓冲区、WAL 缓冲区、锁表和 SLRU 的 LWLock。文中逐个说明 buffer_content、WALWriteLock、WALInsertLock、ProcArrayLock 的竞争场景。方法是先按等待事件分组统计,再结合并发写入和事务速率判断负载热点。
Vibhor Kumar 发布 column_encrypt v4.0,这个扩展用 encrypted_text 与 encrypted_bytea 两种类型做列级透明加密。新版把管理函数收进 encrypt schema,三角色权限模型简化为单一的 column_encrypt_user,日志脱敏改为自动完成;函数更名为 register_key、load_key、rotate 与 verify。升级需先经 v3.3 过渡。
David E. Wheeler 团队发布 pg_clickhouse 0.2.0,这是在 PostgreSQL 里查询 ClickHouse 的接口。这一版扩大了下推范围,覆盖日期、时间、数组和正则函数。PostgreSQL 用 POSIX 正则、ClickHouse 用 RE2,新代码会检查兼容性并自动补上 (?-s),关掉 ClickHouse 默认开启的 s 标志。0.2.0 完全向后兼容。
AWS 的 Ken Zhang 演示了把 .NET Lambda 接到 Amazon Aurora PostgreSQL 的做法:连接池交给 RDS Proxy,凭证放进 Secrets Manager,驱动用 Npgsql。文章附了一份 CloudFormation 模板,再给出 C# Lambda 取凭证、经代理连库查询的代码。对从 SQL Server 迁往 PostgreSQL 的团队尤其省事。
改动推送后测试覆盖成问题,Tomas Vondra 已在五台构建农场机器上手工打开 JIT。
DO ALSO 规则中的 NEW.gen 更新时返回旧行、插入时返回 NULL,存储列与虚拟列都受影响。
v16 补丁在 read_stream_begin_relation() 和 StartReadBuffersImpl() 中加校验,已确认拦住越界访问。
Andres Freund 主张把 ShareUpdateExclusiveLock 视作将升级为 AccessExclusiveLock,避免多余的会话取消。