PostgreSQL 技术日报 (4月5日)|六大核心补丁进展,生产环境必看

0 阅读6分钟

🔔 关注【IvorySQL开源数据库社区】公众号即可获取 PostgreSQL 一手干货与最新动态

pg每日新闻封面.png

📨 PostgreSQL Hacker 电子邮件讨论精选

🧩 REPACK [CONCURRENTLY] 的使用

讨论REPACK CONCURRENTLY 功能正在开发中,目前正在解决几个技术问题。Hayato Kuroda 发现了一个问题:当遇到并发 REPACK 操作时,wraparound autovacuum worker 会因错误而终止,这与其他命令中 autovacuum 等待的行为不同。Alvaro Herrera 解释说这是有意的设计 - 理论上 autovacuum 是不必要的,因为 REPACK 无论如何都会推进 freeze xmin/multixact。但是这会导致 autovacuum launcher 反复尝试和 worker 被杀死。Antonin Houska 和 Alvaro 讨论了用回调机制替代全局变量方法来处理逻辑解码,最终决定在 OutputPluginOptions 结构中添加一个标志。Srinath Reddy 确认修复了 Windows CI 中 TotalMaxReplicationSlots 在 worker fork 后被重置为零的问题。讨论表明并发 REPACK 实现与 PostgreSQL autovacuum 系统的交互仍在持续改进中。

www.postgresql.org/message-id/…

🧩 通用执行计划与"初始"分区裁剪

Amit Langote 提交了一个重新设计的补丁,用于解决缓存计划中的分区裁剪问题。新架构将执行锁获取从 GetCachedPlan() 中移除,改由调用方负责。这消除了有问题的 CachedPlanPrepData 结构,该结构之前在偷运执行器状态。四补丁系列包括:将锁获取从 GetCachedPlan() 中移出、重构执行器分区裁剪设置、引入 ExecutorPrep() 来分离范围表初始化和权限检查,以及通过 ExecutorPrepAndLock() 为单语句缓存计划实现裁剪感知锁定。多语句计划继续使用保守锁定。Portal 和 EXPLAIN EXECUTE 路径从此优化中受益,而其他调用点暂时保持保守路径。这种方法与 Tom Lane 在 2023 年 1 月建议的从 GetCachedPlan() 中移除 AcquireExecutorLocks() 的想法一致。Amit 的目标是 PostgreSQL v20 CF1 而非 v19。

www.postgresql.org/message-id/…

🧩 pg_plan_advice 扩展的使用与优化建议

讨论的焦点是在 v19 功能冻结之前稳定 pg_plan_advice,主要围绕测试可靠性问题展开。Tom Lane 建议要么将 test_plan_advice 改为串行运行,要么完全移除它,理由是 buildfarm 失败。Robert Haas 主张保持并行测试以收集更多关于低失败率的数据,质疑紧迫性,因为最近只发生了一次失败。Lukas Fittl 对 pg_stash_advice 代码给出积极评价,建议进行一些小的文档改进并添加重置所有 stashes 的 SQL 级函数。Andrei Lepikhov 提出对 pg_plan_advice 与修改查询计划的扩展兼容性的担忧,引用了一个具体的失败案例。Robert Haas 承认这个限制,解释说计划稳定性功能本质上与特定规划器绑定,无法在没有额外工作的情况下处理扩展的任意计划修改。

www.postgresql.org/message-id/…

🧩 索引预取

Peter Geoghegan 发布了 index prefetching 补丁的 v22 版本,修复了最近提交的补丁导致的代码冲突。该补丁集引入了 amgetbatch 接口,使索引访问方法能够批量扫描索引,一次从索引页返回多个匹配项,而非逐个返回。这与新的基于 slot 的 table AM 接口紧密结合,将回调函数从两个扩展到四个,支持普通索引扫描和仅索引扫描的 amgettuple 和 amgetbatch 变体。 Andres Freund 进行了详尽的技术审查,发现了多个问题,包括 Amit Langote 的批量索引探测优化导致的额外代码冲突、IndexFetchTableData 接口中内存分配模式的担忧,以及环形缓冲区实现中 uint8 溢出处理的潜在问题。他建议了架构改进,比如将 IndexFetchTableData 分配移至调用方,并质疑了可见性映射处理和 amgettuple 与 amgetbatch 路径之间统计计数不对称的一些设计决策。

www.postgresql.org/message-id/…

🧩 改进共享数据结构的管理机制和支持动态扩容

Heikki Linnakangas 提出了一个新的 PostgreSQL 共享内存结构管理 API,旨在简化内存分配和初始化过程。该补丁集引入了 ShmemRequestStruct/Hash 函数和回调机制,用于替代当前的两阶段处理方式。Matthias van de Meent 在评审中质疑 ShmemStructDesc 的必要性,建议支持从 _PG_init() 直接调用。他发现了 pending_shmem_requests 循环中的类型混淆 bug,并要求澄清命名约定。Ashutosh Bapat 对齐验证、测试模块结构和缓冲区管理器改进等方面提供了反馈。讨论围绕 API 设计选择展开,就描述符结构应该作为可选参数、返回值还是选项的一部分进行了辩论。Heikki 在后续版本中完全移除了 ShmemStructDesc,为清晰起见拆分了函数,并添加了新的头文件来分离公共 API。这些补丁旨在解耦子系统依赖关系,为未来的可调整大小共享内存功能做准备。

www.postgresql.org/message-id/…

🧩 使用 rdtsc 降低 EXPLAIN ANALYZE 的性能测试开销?

Lukas Fittl 提交了第 17 版补丁,解决了 John Naylor 对 rdtsc 时间优化功能的代码审查反馈。该版本针对 EXPLAIN ANALYZE 的时间开销优化进行了多项改进:重新组织了 pg_cpu.h 中的 CPU 特性标志,将 hypervisor 检测移至新的"identification"类别,与指令集族分离;在注释中完整拼写"Time-Stamp Counter"和"MSR"(Model-Specific Register)以提高可读性;修复了位移操作的编码风格不一致问题。随后 Fittl 发布了第 18 版来处理提交 5e13b0f240397b2 造成的 rebase 冲突,同时重新排列了特性标志的顺序,将 128/256/512 位寄存器分组在前,hypervisor 和 TSC 标志紧随其后。该补丁在审查迭代中持续推进,目前没有重大技术异议。

www.postgresql.org/message-id/…

🌐 社交媒体动态

🧩 电商软件解决方案领导者Mirakl需要将数据团队整合到统一平台,避免孤立工作流程并保持数据控制

电商软件领域的领先企业Mirakl面临着数据团队各自为政、工作流程孤立的挑战。公司采用Databricks平台实现了数据团队的统一,建立了单一数据源。他们开发了名为Catalog Transformer的生成式AI系统,用于自动化供应商目录入驻流程。这一变革将原本需要28天的处理时间缩短至不到24小时,同时降低了运营成本,提升了数据质量,让团队能够在统一、…

www.linkedin.com/posts/datab…

🧩 Nick Karpov 和 Holly Smith 介绍 Databricks 最新功能及其统一架构集成

Nick Karpov 和 Holly Smith 展示了 Databricks 的最新功能以及这些功能在统一架构下的集成方式。研发团队的最新成果包括:在 Databricks 基础模型 API 中新增三个基础模型、无状态流处理性能优化、MLflow 轨迹与 Unity Catalog 表格的同步功能,以及多语句事务、监督代理和指标视图等新特性。这些进展展…

www.linkedin.com/posts/datab…

🔥 HOW 2026 报名进行中

一场真正以技术为核心的 PostgreSQL 大会 HOW 2026 PostgreSQL & IvorySQL 技术峰会火热报名中 📍 2026 年 4 月 27 日 - 28 日|济南

报名二维码.png