GPDB-内核特性-GP7不再支持动态分区裁剪

简介: GPDB-内核特性-GP7不再支持动态分区裁剪

GPDB-内核特性-GP7不再支持动态分区裁剪


GreenPlum支持分区表的功能,并通过分区裁剪来减少读取的数据量。分区裁剪分为静态分区裁剪和动态分区裁剪。静态分区裁剪:执行计划在生成时,就通过条件值过滤出需要的子分区,执行时仅扫描裁剪后的分区即可;动态分区裁剪:发生在SQL执行阶段,需要根据维度表的数据动态分析出需要哪些分区。


GP6ORCA支持动态分区功能:


    set optimizer=on;
    explain select * from sales;
                                                  QUERY PLAN                                              
    ------------------------------------------------------------------------------------------------------
     Gather Motion 1:1  (slice1; segments: 1)  (cost=0.00..431.00 rows=1 width=16)
       ->  Sequence  (cost=0.00..431.00 rows=1 width=16)
             ->  Partition Selector for sales (dynamic scan id: 1)  (cost=10.00..100.00 rows=100 width=4)
                   Partitions selected: 366 (out of 366)
             ->  Dynamic Seq Scan on sales (dynamic scan id: 1)  (cost=0.00..431.00 rows=1 width=16)
     Optimizer: Pivotal Optimizer (GPORCA)
    (6 rows)

    引入SequencePartitionSelectorDynamicSeqScan等算子完成动态分区裁剪。PartitionSelector根据数据分析出需要哪些分区,DynamicSeqScan扫描对应分区,Sequence负责处理所有DynamicSeqScan算子。

    然而,GP7中进行测试时,发现执行计划不一样了:

      set optimizer=on;
      explain select * from sales;
                                             QUERY PLAN                                        
      -----------------------------------------------------------------------------------------
       Gather Motion 1:1  (slice1; segments: 1)  (cost=0.00..812886.00 rows=22179600 width=24)
         ->  Append  (cost=0.00..369294.00 rows=22179600 width=24)
               ->  Seq Scan on sales_1_prt_1  (cost=0.00..706.00 rows=60600 width=24)
               ->  Seq Scan on sales_1_prt_2  (cost=0.00..706.00 rows=60600 width=24)
               ->  Seq Scan on sales_1_prt_3  (cost=0.00..706.00 rows=60600 width=24)
                ................
                ................
               ->  Seq Scan on sales_1_prt_364  (cost=0.00..706.00 rows=60600 width=24)
               ->  Seq Scan on sales_1_prt_365  (cost=0.00..706.00 rows=60600 width=24)
               ->  Seq Scan on sales_1_prt_366  (cost=0.00..706.00 rows=60600 width=24)
       Optimizer: Postgres query optimizer
      (369 rows)

      发生了什么?经过分析查看GreenPlumissues,发现GP7竟然不支持动态分区了:

      https://github.com/greenplum-db/gpdb/issues/11363

      Partition table support in Orca was disabled for the master branch and we currently fall back to planner on all queries on partition tables. We are actively working to add this functionality back (eg: #11336 re-introduces support for static partition elimination).

      Master分支中,目前是GP7Orca禁用了分区表,执行计划又回到要查询所有分区表。我们正在积极做这个事,#11336重新引入支持静态分区裁剪功能:

      https://github.com/greenplum-db/gpdb/pull/11336

      Does this mean there will be no Dynamic scan node added to the plan?

      @JunfengYang Yes, our current plan is to not use DynamicXXXScan nodes anymore, and use the Append node (just as in Planner) with enumerated Scan node children.

      当前版本计划,不再使用DynamicXXXScan节点了,而是使用带有枚举Scan子节点的Append节点完成。

      那么,GP7中如何实现动态分区裁剪的效果呢?

        Gather Motion
          ->Nest Loop
            ->Append
              ->SeqScan on tpart1
              ->SeqScan on tpart2
              ->...
              ->SeqScan on tpartn
            ->Material
              ->Partition Selector
                ->SeqScan on t1

        比如一个nest loop join,通过顺序扫描表t1,将他的值都扫描出来,然后通过PartitionSelector算子判断这些值落在哪个分区表中,并将所有值通过Material算子物化;Append算子根据PartitionSelector算子计算的分区,顺序扫描这些的到的分区得到值,与Material算子物化值进行join。

        目录
        相关文章
        |
        网络安全 数据安全/隐私保护
        ssh远程执行命令自动输入密码方式
        ssh远程执行命令自动输入密码方式
        4099 0
        |
        1月前
        |
        存储 算法 JavaScript
        OAuth2协议与微信扫码登录实战
        本文介绍了OAuth2协议及其在微信扫码登录中的应用实现。OAuth2是一种开放、安全的授权标准,支持授权码、密码等多种模式,其中授权码模式被微信扫码登录采用。文章详细解析了微信扫码登录流程:用户扫码授权→获取授权码→换取令牌→获取用户信息→完成登录。技术实现方面,使用JWT令牌解决认证服务与资源服务间的校验问题,并提供了完整的后端接口设计(包括获取授权URL、处理回调等)和前端测试页面代码。系统通过网关进行统一认证,各微服务自行处理授权,确保安全性的同时提高性能。整体方案实现了基于OAuth2协议的无缝第
        |
        1月前
        |
        弹性计算 人工智能 安全
        从0到1落地OpenClaw:阿里云ECS及Mac/Linux/Windows本地搭建+免费百炼API配置集成Skill指南
        OpenClaw(曾用名Clawdbot、Moltbot)是2026年开源AI智能体领域的核心工具,其核心价值在于支持本地部署、数据隐私可控,通过Skill(技能插件)扩展实现办公自动化、代码开发、文件管理、实时联网等全场景任务,真正让AI从“聊天工具”升级为“可执行任务的全能助手”。OpenClaw本身不具备大模型推理能力,需对接外部大模型API才能发挥全部功能,而阿里云百炼作为国内成熟的大模型服务平台,为新用户提供免费调用额度,且与OpenClaw实现深度适配,是新手零成本解锁AI能力的最优选择。
        406 6
        |
        6月前
        |
        人工智能 算法 调度
        阿里云ACK托管集群Pro版共享GPU调度操作指南
        本文介绍在阿里云ACK托管集群Pro版中,如何通过共享GPU调度实现显存与算力的精细化分配,涵盖前提条件、使用限制、节点池配置及任务部署全流程,提升GPU资源利用率,适用于AI训练与推理场景。
        595 1
        |
        4月前
        |
        算法 安全 数据安全/隐私保护
        比较一下 DES、AES、SM4
        DES、AES和SM4均为对称加密算法。DES采用56位密钥,已不推荐使用;AES支持128、192、256位密钥,全球广泛采用;SM4为我国商用密码标准,支持128位密钥,主要用于国内信息安全领域。
        |
        5月前
        |
        人工智能 Java 关系型数据库
        IT精选面试题系列之Java(面试准备篇)
        消失一年回归!前凡人程序员化身面试导师,爆肝整理高频IT面试题。首期聚焦Java,涵盖技术储备、项目包装、简历优化与话术技巧,教你从0到1拿下Offer,干货拉满,速来取经!
        216 2
        |
        SQL 存储 算法
        PostgreSQL 执行计划,成本公式解说,代价因子校准,自动跟踪SQL执行计划(二)|学习笔记
        快速学习PostgreSQL 执行计划,成本公式解说,代价因子校准,自动跟踪SQL执行计划(二)
        PostgreSQL 执行计划,成本公式解说,代价因子校准,自动跟踪SQL执行计划(二)|学习笔记
        |
        存储 SQL 缓存
        一文带你了解MySQL之Adaptive Hash Index
        在InnoDB体系架构图的内存结构中,还有一块区域名为:Adaptive Hash Index,翻译成中文:自适应哈希索引,缩写:AHI,它是一个纯内存结构,我们今天就来了解它。
        3295 0
        |
        JavaScript 前端开发 Android开发
        JavaScript触摸touch事件
        JavaScript触摸touch事件