首页 > 其他分享 >ORCA优化器浅析——IMDRelation Storage type of a relation GP6与GP7对比

ORCA优化器浅析——IMDRelation Storage type of a relation GP6与GP7对比

时间:2023-10-15 13:05:03浏览次数:42  
标签:存储 Storage storage relation CTranslatorRelcacheToDXL 类型 判定 浅析


ORCA优化器浅析——IMDRelation Storage type of a relation GP6与GP7对比_linux


如上图所示IMDRelation作为Interface for relations in the metadata cache,其定义了Storage type of a relation表的存储类型,如下所示:

enum Erelstoragetype {
		ErelstorageHeap,
		ErelstorageAppendOnlyCols,
		ErelstorageAppendOnlyRows,
		ErelstorageAppendOnlyParquet,
		ErelstorageExternal,
		ErelstorageVirtual,
		ErelstorageSentinel
	};

下面是ErelstorageHeap存储类型所涉及到的代码:

  • CTranslatorQueryToDXL::TranslateCTASToDXL Translate a CTAS 设定CDXLLogicalCTAS类的存储类型
  • CTranslatorRelcacheToDXL::RetrieveRelStorageType Get relation storage type根据存储类型字符获取其Erelstoragetype枚举类型
  • CXformUtils::PexprBuildIndexPlan Construct an expression representing a new access path using the given functors for operator constructors and rewritten access path. Non-heap tables not supported for GiST 非heap表不支持GiST判定

下面是ErelstorageAppendOnlyCols存储类型所涉及到的代码:

  • CTranslatorQueryToDXL::GetDXLCtasOptionArray Translate CTAS storage options 根据存储选项判定存储类型
  • CTranslatorRelcacheToDXL::RetrieveRelColumns Get relation columns AO表需要添加系统列
  • CTranslatorRelcacheToDXL::RetrieveRelStorageType Get relation storage type根据存储类型字符获取其Erelstoragetype枚举类型
  • CTableDescriptor::IsAORowOrColTable 判定是否是AO表

下面是ErelstorageAppendOnlyRows存储类型所涉及到的代码:

  • CTranslatorQueryToDXL::GetDXLCtasOptionArray Translate CTAS storage options 根据存储选项判定存储类型
  • CTranslatorRelcacheToDXL::RetrieveRelColumns Get relation columns AO表需要添加系统列
  • CTranslatorRelcacheToDXL::RetrieveRelStorageType Get relation storage type根据存储类型字符获取其Erelstoragetype枚举类型
  • CTableDescriptor::IsAORowOrColTable 判定是否是AO表
  • CUtils::FGeneratePartOid generate part oid 判定InsertSortOnRows
  • CPhysicalDML::FInsertSortOnRows Do we need to sort on insert

下面是ErelstorageAppendOnlyParquet存储类型所涉及到的代码:

  • CTranslatorQueryToDXL::GetDXLCtasOptionArray Translate CTAS storage options 根据存储选项判定存储类型
  • CUtils::FGeneratePartOid generate part oid 判定InsertSortOnParquet
  • CPhysicalDML::FInsertSortOnParquet Do we need to sort on parquet table

下面是ErelstorageExternal存储类型所涉及到的代码:

  • CTranslatorDXLToPlStmt::TranslateDXLTblScan Translates a DXL table scan node into a TableScan node
  • CTranslatorQueryToDXL::TranslateRTEToDXLLogicalGet Returns a CDXLNode representing a from relation range table entry
  • CTranslatorRelcacheToDXL::RetrieveRel Retrieve a relation from the relcache given its metadata id 不为外部表的情况下get partition keys;Retrieve full part constraints partitioned tables with indexes or external partitions, returns NULL for non-partitioned tables
  • CTranslatorRelcacheToDXL::RetrieveRelStorageType Get relation storage type根据存储类型字符获取其Erelstoragetype枚举类型
  • COptTasks::PrintMissingStatsWarning Print warning messages for columns with missing statistics 不为外部表时打印missing statistic信息

下面是ErelstorageVirtual存储类型所涉及到的代码:CTranslatorRelcacheToDXL::RetrieveRelStorageType Get relation storage type根据存储类型字符获取其Erelstoragetype枚举类型。该枚举类型应该是不用的。

GP6与GP7存储类型对比

ORCA优化器浅析——IMDRelation Storage type of a relation GP6与GP7对比_linux_02

enum Erelstoragetype{
		ErelstorageHeap,
		ErelstorageAppendOnlyCols,
		ErelstorageAppendOnlyRows,
		ErelstorageForeign,
		ErelstorageMixedPartitioned,
		ErelstorageCompositeType,
		ErelstorageSentinel
	};

下面是ErelstorageHeap存储类型所涉及到的代码:

  • CTranslatorQueryToDXL::TranslateCTASToDXL Translate a CTAS 设定CDXLLogicalCTAS类的存储类型
  • CTranslatorRelcacheToDXL::RetrieveRelStorageType Get relation storage type
  • CTranslatorRelcacheToDXL::RetrieveStorageTypeForPartitionedTable 如果rel->rd_partdesc->nparts == 0,返回ErelstorageHeap存储类型
  • CXformUtils::PexprBuildIndexPlan Construct an expression representing a new access path using the given functors for operator constructors and rewritten access path. Non-heap tables not supported for GiST 非heap表不支持GiST判定

下面是ErelstorageAppendOnlyCols存储类型所涉及到的代码:

  • CTranslatorQueryToDXL::GetDXLCtasOptionArray Translate CTAS storage options 根据存储选项判定存储类型
  • CTranslatorRelcacheToDXL::RetrieveRelStorageType Get relation storage type根据AM获取其Erelstoragetype枚举类型
  • CTableDescriptor::IsAORowOrColTable 判定是否是AO表

下面是ErelstorageAppendOnlyRows存储类型所涉及到的代码:

  • CTranslatorQueryToDXL::GetDXLCtasOptionArray Translate CTAS storage options 根据存储选项判定存储类型
  • CTranslatorRelcacheToDXL::RetrieveRelStorageType Get relation storage type根据AM获取其Erelstoragetype枚举类型
  • CTableDescriptor::IsAORowOrColTable 判定是否是AO表

下面是ErelstorageForeign存储类型所涉及到的代码:

  • CTranslatorDXLToPlStmt::TranslateDXLTblScan Translates a DXL table scan node into a TableScan node
  • TranslatorQueryToDXL::TranslateRTEToDXLLogicalGet Returns a CDXLNode representing a from relation range table entry 新建CDXLLogicalForeignGet分支
  • CTranslatorRelcacheToDXL::RetrieveRel Retrieve a relation from the relcache given its metadata id. root partitions don’t have a foreign server 重要
  • CTranslatorRelcacheToDXL::RetrieveRelStorageType rel->rd_rel->relkind == RELKIND_FOREIGN_TABLE分支
  • CTranslatorRelcacheToDXL::RetrieveStorageTypeForPartitionedTable for partitioned tables with foreign partitions, we want to ignore the foreign partitions for determining the storage-type (unless all of the partitions are foreign) as we’ll be separating them out to different scans later in CXformExpandDynamicGetWithForeignPartitions
  • CTranslatorUtils::GetTableDescr Create a DXL table descriptor from a GPDB range table entry fall back to the planner for queries on coordinator-only table if they are disabled with Orca
  • CTranslatorUtils::RelContainsForeignPartitions
  • COptTasks::PrintMissingStatsWarning Print warning messages for columns with missing statistics 不为外部表时打印missing statistic信息
  • CTranslatorDXLToExpr::PexprLogicalGet Create a Expr logical get from a DXL logical get store array of foreign partitions

下面是ErelstorageMixedPartitioned存储类型所涉及到的代码:

  • CTranslatorRelcacheToDXL::RetrieveStorageTypeForPartitionedTable mark any partitioned table with supported partitions of mixed storage types, this is more conservative for certain skans (eg: we can’t do an index scan if any partition is ao, we must only do a sequential or bitmap scan)
  • CXformIndexGet2IndexOnlyScan::Exfp 判定possible_ao_table
  • CXformIndexGet2IndexScan::Exfp 判定possible_ao_table
  • CXformUtils::FIndexApplicable Check if an index is applicable given the required, output and scalar expression columns 判定possible_ao_table
  • CXformUtils::PexprBitmapSelectBestIndex Given conjuncts of supported predicates, select the best index and construct a bitmap index path expression. Return unused predicates as residuals 判定possible_ao_table

下面是ErelstorageCompositeType存储类型所涉及到的代码:CTranslatorRelcacheToDXL::RetrieveRelStorageType中对应RELKIND_COMPOSITE_TYPE获取存储类型ErelstorageCompositeType

从上面的对比可以看出AP7将分区表子分区混合存储这种情况单独作为了一种存储类型ErelstorageMixedPartitioned。


标签:存储,Storage,storage,relation,CTranslatorRelcacheToDXL,类型,判定,浅析
From: https://blog.51cto.com/feishujun/7871362

相关文章

  • 安装odoo13出现relation "ir_module_module" does not exist
    全新安装的odoo,但启动时出现relation"ir_module_module"doesnotexist,以为是数据库要手动初始化,所以也在启动时加入-ibase-dodoo13的命令,但也无效,注释addons_path就ok,但路径检查过是没有问题的,待启动之后,再打开addons_path就行了,应该和addons_path里面有些插件有错误导致......
  • 浅析斐波那契数列在代码中的应用
    byemanjusakafrom​https://www.emanjusaka.top/archives/9彼岸花开可奈何本文欢迎分享与聚合,全文转载请留下原文地址。前言斐波那契数列在代码中的应用是比较常见的,下面让我们来了解下一个数学上的数列在代码中会有哪些应用。了解斐波那契,可以给我们提供解决某些问题的......
  • 关于linux:Android的/ storage / emulated / 0和/ data / media / 0的不同权限
     Android/storage/emulated/0and/data/media/0differentpermissions我有LGG3智能手机。在文件系统探索期间,我发现/storage/emulated/0/...目录(从系统接收到我的本地用户)具有不允许chmod和chown操作的权限。当我尝试将某些文件更改为777时,我收到了0个结果......
  • 前端网页sessionStorage对值的获取与传值
    前端网页sessionStorage对值的获取与传值sessionStorage主要在页面之间进行值得传输·允许跨页面。可以是单个值,以及JSON对象的传递,主要方法有这些sessionStorage[key]=val//保存一个数据sessionStorage.setItem(key,val)//保存一个数据varval=sessionStorage[key]//读取一个数......
  • 浅析森林烟火AI检测算法的应用及场景使用说明
    一、方案背景现有的森林防火监测系统落后,以人工地面巡护、瞭望塔高点巡查为主,存在巡护范围有限、巡护效率低等问题,建立健全的森林防火风险预警体系,实现对森林、林场等场景的全天候智能自动监测、火情预警,及时发现森林火灾并辅助决策,是当前林业管理的重要任务。二、方案概述旭帆......
  • awr_plan_change脚本中平均执行时间不正确浅析?
    awr_plan_change.sql脚本是KerryOsborne的一个脚本,这个脚本也是我非常喜欢并且经常使用的一个脚本。脚本如下所示set lines 155col execs for 999,999,999col avg_etime for 999,999.999col avg_lio for 999,999,999.9col sql_id for a16col begin_interval_tim......
  • 论文阅读:A Lightweight Knowledge Graph Embedding Framework for Efficient Inferenc
    ABSTRACT现存的KGE方法无法适用于大规模的图(由于存储和推理效率的限制)作者提出了一种LightKG框架:自动的推断出码本codebooks和码字codewords,为每个实体生成合适的embedding。同时,框架中包含残差模块来实现码本的多样性,并且包含连续函数来近似的实现码字的选择。为更好的提升K......
  • sessionStorage的setItem和getItem使用
    一、vue文件使用sessionStorage:(简单存值取值)1.存储数据:sessionStorage.setItem('取得k的名字','要存储的值')vuesessionStorage.setItem('loadClaim','this.node')2.获取数据:sessionStorage.getItem('取得k的名字')vuesessionStorage.getItem......
  • 浅析C++ atomic
    早在C++11就在STL中引入了原子操作支持了。大部分时候,我使用C++11的atomic仅仅是为了原子地操作特定的一个变量,比如load、store、fetch_add等等。然而实际上,C++11的原子操作带着的memoryorder还能起到memorybarrier的作用。本文会从头介绍C++11原子变量的用法,使用的注意事项以及......
  • intel-RDT技术浅析
    前言本文适合于想要了解RDT技术的人阅读,会涉及到RDT技术的硬件机制,需要对CPU的socket、core、thread等概念有一定的了解。RDT技术简介RDT技术全称ResourceDirectorTechnology,RDT技术提供了LLC(Lastlevelcache)以及MB(MemoryBandwidth)内存带宽的分配和监控能力。RDT的主要功......