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。
保留原始来源与发布日期的新闻、博客和活动。
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() 中加校验,已确认拦住越界访问。
DATASENTINEL 发布了 pg_datasentinel 首个正式版本,一个专注可观测性的开源扩展。它在 pg_stat_activity 之上补出每个后端的内存占用和实时临时文件字节数,PostgreSQL 18 及以上还给出当前执行计划 ID,并在 cgroup 环境里报告 CPU 配额与内存上限。它还跟踪 XID 消耗速率、估算距回卷上限的剩余时间,把 vacuum、检查点等事件解析成可查询的视图。要求 15 或更高版本。
Autobase 是自建高可用 PostgreSQL 集群的开源 DBaaS 替代方案。2.7.0 与 Zexa Technologies 合作,把 DBDesk Studio 作为嵌入式 SQL 编辑器接进控制台,可以直接连接集群、执行查询和管理数据;同时内置由 pg_auto_reindexer 驱动的自动索引维护,在膨胀拖慢查询之前重建。此外新增 24 个云区域,控制台镜像补上 ARM 支持。
pgEdge 的 Shaun Thomas 解释了强制检查点为何拖垮写入密集实例。定时检查点按 checkpoint_completion_target 把刷盘摊开,而 WAL 触到 max_wal_size 时的强制检查点不理会这个设置,只能立刻刷盘。测试中 1GB 配置的 TPS 从 1100 跌到 620,4GB 则保持平稳。建议写入密集场景调到 10–20GB,批量作业 50GB 以上,并打开 log_checkpoints。
Slotix 发布 DBConvert Streams 2.0,把数据迁移、数据探索和实时复制收进同一个工具。它基于 PostgreSQL 逻辑复制的 WAL 做日志式变更数据捕获,不依赖 Kafka 或额外流水线组件就能持续同步;支持与 MySQL 之间的迁移并自动转换 schema,内置 SQL 界面,还能跨 CSV、JSON、Parquet 文件做联邦查询。可本地运行,也可用 Docker 部署。
Tiger Data 的 Doug Pagnutti 用工业物联网场景说明 TimescaleDB 在哪三处突破了原生 PostgreSQL 的限制。它把表自动切成按时间划分的块,索引小到能放进内存,写入速率随之抬高;查询靠块排除只扫相关时间范围,再用连续聚合预算好汇总,把耗时从 250–1500 毫秒压到 0.4 毫秒;旧块转成列式后压缩率可达 80% 至 95%。厂商称年存储成本可能从 15 万美元降到 1.5 万美元。
Zhijie Hou 发现长事务阻止 restart_lsn 推进,WAL 被保留数小时甚至数天,补丁让工作进程定期推进。
视图里的 UNION ALL 混用 int[] 与 bigint[] 时触发 XX000,17、18 和 master 分支均受影响。
Jeff Davis 指出代码对 DatumGetArrayTypeP 的结果调用 pfree,pg_get_role_ddl() 会报无效指针。
第 27 版让 pg_test_timing 在校准频率与上报频率相差超过一成时告警,并提示改用 system 时钟源。