PostgreSQL码农集散地

PostgreSQL 愈来愈奔放: 向插件开放执行路径生成策略

本期播客

PostgreSQL 愈来愈奔放: 向插件开放执行路径生成策略

在数据库技术的江湖里,查询优化器(Optimizer)一直被誉为“皇冠上的明珠”。长期以来,由于其逻辑极其复杂、耦合度极高,各大主流数据库往往将其视为不可触碰的“禁地”。

但最近,PostgreSQL(以下简称 PG)再次展现了其作为“数据库界 Linux”的野性与自信。PG 社区提交了一项重量级更新:允许插件通过 Hook 直接控制执行路径(Path)的生成策略。 这不只是一次代码重构,这是一场“主权下放”。这意味着,开发者终于可以绕过呆板的 GUC 参数,精准地告诉优化器:“这一张表,不许用全表扫描;那一个关联,必须走 Hash Join。”

https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=4020b370f214315b8c10430301898ac21658143f

一、 痛点:被“一刀切”统治的恐惧

在过去,DBA 调整优化器行为的手段极其匮乏,主要依赖 enable_indexscan、enable_hashjoin 这种全局或会话级的 GUC 参数。

  • 现状: 如果你发现某个查询走 Hash Join 性能极差,你只能关闭全局 Hash Join 开关。
  • 代价: 这种“宁可错杀一千,不可放过一个”的做法,往往导致 A 查询修好了,B 查询却因为失去了 Hash Join 而崩溃。
  • 本质: 传统的优化器是一个“黑盒”,它基于代价模型(Cost-based)进行黑盒决策。但模型永远是现实的抽样,在面对复杂多变的业务场景时,这种单一决策机制必然失灵。

二、 技术剖析:从“全局宵禁”到“精准手术”

此次更新引入了 pgs_mask 机制,并开放了 get_relation_info_hook、joinrel_setup_hook 和 join_path_setup_hook 三大核心钩子。

1. 细粒度的策略掩码(pgs_mask)

每个关系(RelOptInfo)现在都自带一个“通行证”掩码。插件可以在优化阶段,根据当前的表名、数据量甚至业务上下文,动态修改这个掩码。

  • 基础表阶段: 你可以指定特定的表只生成索引扫描路径。
  • 连接表阶段: 在两个大表进行 Join 时,插件可以实时干预,剔除掉那些明显会导致 OOM 的路径。

2. 第一性原理:信息对称是优化的前提

从第一性原理出发,查询优化的本质是在搜索空间中寻找最优解。 通用优化器的失败,往往是因为它掌握的信息不如开发者(或 AI 插件)多。开发者知道某个分区表的未来增长趋势,知道某个关联键的业务分布,而优化器只看统计信息。通过向插件开放路径控制,PG 实现了“信息补偿”,让外部智慧能够介入搜索过程。

三、 权威支撑:为什么这改变了游戏规则?

1. 工业界的血泪案例

参考 AWS Aurora 或 Google AlloyDB 的落地经验,许多性能问题的终点都是“执行计划漂移”。

案例: 某顶级金融机构在处理月结报表时,因为统计信息微小的波动,优化器突然将原本 10 毫秒的嵌套循环(Nested Loop)转为全表扫描,导致核心链路阻塞 2 小时。

如果有了这次开放的钩子,DBA 可以直接编写一个微型插件,锁定该特定业务逻辑的执行策略,实现真正的执行计划定格(Plan Freezing)。

2. AI 原生数据库的基石

目前,利用机器学习训练优化器(Learned Optimizer)是数据库领域的前沿。

  • 数据支撑: 根据 VLDB 等顶会的论文研究,基于 AI 驱动的路径选择策略在复杂 Join 场景下,比传统动态规划算法能提升 20%-50% 的效率。
  • 落地: PG 的这次更新,实际上为 AI 介入数据库核心决策 铺平了道路。AI 插件现在可以作为一个“副驾驶”,在优化器迷茫时接管 pgs_mask。

四、 逻辑的崩塌与新范式

前提假设: 我们假设“给开发者权力”一定能带来性能提升。
条件崩塌: 如果插件开发者对 PG 优化器底层逻辑理解不足,胡乱干扰 pgs_mask,将会导致优化器找不到任何可用路径(Path-less),直接引发系统宕机或查询报错。

引申观点: 当“手动干预”的风险不可控时,数据库将进入 “策略自愈” 时代。
此次 Hook 的开放,其终极意义不在于让 DBA 去手写代码控制路径,而在于支撑起一个庞大的中间层生态。未来,我们可能会看到类似 pg_hint_plan 的超进化版——它不再是卑微地给优化器提建议(Hint),而是拥有裁决权的“监军”。

结语

PostgreSQL 正在变得越来越“奔放”。从支持 JSONB 到支持向量检索(pgvector),再到今天开放优化器路径生成策略,它完美诠释了什么是真正的可扩展性。

它不再试图做一个全能的上帝,而是选择做一个开放的平台。将选择权交给插件,本质上是将选择权交给了最了解业务的开发者。

那么问题来了:当优化器的“黑盒”被彻底打开,你是感到兴奋,还是感到一丝“权限过大”的惶恐?

最后附一则济南的线下峰会消息:
PostgreSQL & IvorySQL 2026 年度峰会将于4月份在济南召开,这是目前国内规模最大的PG峰会. 
我是新特性分论坛出品人,欢迎报名参与分享,主委会可解决分享嘉宾住宿和路费。
报名地址:  https://jsj.top/f/uebqBc

议题方向:

  • PostgreSQL 新功能
  • PostgreSQL 内核机制与性能优化
  • PostgreSQL 扩展程序
  • AI + PostgreSQL 技术实践
  • 云原生PostgreSQL或IvorySQL
  • PostgreSQL 用户实践
  • IvorySQL 兼容性与生态实践
  • 基准测试与性能调优
  • 高可用性技术
  • …… 任何与PostgreSQL或IvorySQL相关的内容