首页 > 其他分享 >GBase 8a 执行计划Explain介绍

GBase 8a 执行计划Explain介绍

时间:2024-09-13 09:17:52浏览次数:1  
标签:join 结果 步骤 Explain 8a T2 分布 执行 GBase

本文介绍GBaase 8a数据库集群的执行计划功能。包括语法以及一些常见场景的执行计划分析。

语法

explain/desc [extanded/partitions] select …
  • explain只能显示sql select部分的执行计划
  • 标准输出为explain,加extanded/partitions时可以以扩展方式和树形方式输出执行计划信息
  • 支持with … as select …类型的CTE(Common Table Expression)公用表表达式语法,需要集群层设置_t_gcluster_support_cte=1

说明

标准输出界面及主要组成部分

显示界面主要组成部分:

  • ID:SQL执行步骤,顺序从下向上
  • MOTION:某个步骤的结果处理方式
  • OPERATION:某个步骤内的具体执行操作
  • TABLE:某个operation涉及的表
  • CONDITION:某个operation操作涉及的条件

1234

执行计划每个列的含义

显示列 具体释义
ID 执行计划的步骤,从00开始,从显示界面的下方向上执行。
MOTION 某个步骤的结果集处理方式,具体包括如下:
RESULT:结果发送到客户端,一般为执行计划的最后一步;
GATHER:结果发送到汇总节点,一般在sort或聚集函数操作前;
REDIST(…):结果HASH重分布,括号中为计算HASH的列,如果超长则截断为两个点;
NO REDIST:结果直接保存到对应的数据分片,不进行重分布;
BROADCAST:结果拉复制表;
RAND REDIST:结果随机分布到所有节点;
SCALAR N:结果为标量,N为标量子查询的编号,如果条件中有引用,则使用&xNx&方式引用。
OPERATION 某个步骤的具体操作:
SCAN:单表扫描,并使用条件过滤数据;
Table:单表,没有过滤条件;
SubQueryN:子查询,N为自动编号;
Step:使用前一个Step的结果;
INNER/LEFT/FULL JOIN:连接操作;
WHERE:子查询的WHERE条件;
GROUP:分组操作;
ORDER:排序操作;
LIMIT:计算LIMIT,OFFSET;
AGG:distinct,聚集操作;
UNION/UNION ALL/MINUS/INTERSECT:UNION操作。
TABLE 某个操作OPERATION涉及的表,只显示别名和属性,超长截断为两个点:
HASH分布表:中括号中显示HASH列;
复制表:显示[REP];
随机分布表:显示[DIS];
子查询:OPERATION列显示SubQueryN,其中N为数字,用来区分不同的子查询;
某个步骤的结果集:OPERATION列显示为Step,本列显示为<N>其中N为ID列中的对应值,表示该步骤的结果。
CONDITION 显示某个操作OPERATION的条件:
SCAN操作单表过滤条件;
JOIN操作的连接条件;
GROUP BY操作涉及列或表达式;
ORDER BY操作涉及列或表达式;
LIMIT OFFSET内容。
执行计划每个列的含义

步骤内的执行计划缩进显示

样例1

SQL语句

一个内层多表LEFT JOIN,外层group的SQL。其中主表T1和T2表(OVIEW.ods_XXXX)是一个视图。

执行计划

解析

Step00

  • Step00在内存中物化视图T2表
  • T2表是视图,GBase中转换为子查询(SubQuery4)
  • T2表上无单表条件,因此视图基表ods_XXXX的OPXXXX是Table,表示单表且无过滤条件
  • MOTION中有REDIST(maXXX)表明ods_XXXX表需要按照maiXXX进行一次动态重分布,ods_XXXX表本身的分布列是id,重分布的原因是和t1表的关联列是maiXXX

Step01

  • Step01是T1表子查询内部的基表物化步骤,基表为ods_XXXXX
  • CONDITION中Where条件为CAST(INDATE AS DATE) <= CAST(‘2020-03-31’ AS DATE),GROUP BY条件为maXXXX
  • MOTION中有REDIST(maXXXX)表明odsXXXX需要按照mainno进行重分布, odsXXXXX表本身的分布列是id,重分布原因是T1表和T2表join的列是maXXXXX

step02

  • Step02是执行step01和step00的结果inner join的步骤,即T1 inner join T2的步骤
  • T1表是视图,因此GBase转成子查询SubQuery2
  • T1、T2表的join CONDITION为T1.MAXXX = T2.MAXXXX AND CAST(T1.INDATE AS DATE) = CAST(T2.INDATE AS DATE)
  • MOTION中有REDIST(userXXXX)表明step02步骤的结果集需要按照userXXXX进行重分布,step02结果集的分布列是maXXXX,重分布原因是和T3表join的列是userXXXX

Step03

  • Step03是执行step02的结果集和T3 left join的步骤
  • T3是视图,因此OPERATION为子查询SubQuery5,T3表上无单表条件,因此视图基表ods_XXXXr的OPERATION是Table,表示单表且无过滤条件
  • Left join的条件CONDITION为T2.USERXXXX = T3.USERXXXX,这一步的join因step02的结果集已经按useXXXX进行过重分布,T3表本身的分布列就是useXXXX,因此可以走静态hash join执行计划
  • MOTION中有REDIST(maXXXX)表明step03的结果集需要按照mainno列进行一次重分布,原因是step04中的join条件是T1.MAXXXX = T4.CLXXXX,且T4表的分布列是CLXXXX

Step04

  • Step04是执行step03结果集和T4表left join的步骤
  • 根据缩进格式,首先执行stop03结果集<03>和T4表的left join,然后执行where条件过滤,最后执行GROUP BY
  • T4表是视图,所以GBase转为子查询SubQuery6,基表clm_XXXX为单表没有单表条件,因此OPERATION为Table
  • 这一步的结果集<03>的分布列本身为maXXXX(由step03中的MOTION重分布得来),T4表的分布列是claim_XXXX,left join的CONDITION条件为maXXXX = claim_XXXX,执行计划为静态hash join
  • 子查询的结果为TT表,WHERE条件为TT.COXXXX <> TT.ACXXXX AND CAST(TT>TURXXXX AS DATE) <= CAST(‘2020-03-31’ AS DATE)
  • GROUP BY列为CLAXXXX, TURXXXX,包括了子查询tt的hash分布列CLAXXXXO,因此满足静态hash group by执行计划条件
  • Step04的MOTION RESULT意为将最终发送执行结果

标签:join,结果,步骤,Explain,8a,T2,分布,执行,GBase
From: https://www.cnblogs.com/ataoxz/p/18411548

相关文章

  • kingdian S400固态SM2258xt开卡成功 附工具软件 AD, 5E, 28, 22, 10, 90 ,H25QFT8A1A
    开卡工具SM2258XT_HY3D-V4_PKGS0402A_FWS0330B0.zip 拆开以后用镊子短接ROM标识那俩个孔   SM2258XT_HY3D-V4_PKGS0402A_FWS0330B0.zip......
  • GBase 8a通过集群日志查看执行计划和每个阶段的整体耗时和各个节点的耗时做性能排查
    GBase8a提供了执行计划,以及不同的日志级别,现实整体各个节点耗时,以及每个节点的耗时,来方便用户进行性能排查,本文介绍详细的分析方法。环境2节点虚拟机集群[gbase@rh6-1~]$gcadminCLUSTERSTATE:ACTIVECLUSTERMODE:NORMAL=========================================......
  • kingbase——创建timestampdiff函数
    创建函数如下:CREATEORREPLACEFUNCTION"ops_data"."timestampdiff"("para1"text,"para2""sys"."timestamp","para3""sys"."timestamp")RETURNS"pg_catalog".&q......
  • javase复习day18API
    游戏打包exeMathabs方法的小bug:以int类型为例,取值范围:-2147483648~2147483647如果没有正数与之对应,那么传递负数结果有误-2147483648没有正数对应则结果还是 -2147483648可以使用JDK15后的新方法absExact如果结果有误则会报错packageMathDemo1;publiccla......
  • jsp仓储管理系统9e8ai 本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上
    jsp仓储管理系统9e8ai本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表项目功能客户,库存人员,入库人员,出库人员,商品类别,商品信息,仓区信息,商品入库,商品出库开题报告内容一、项目背景与意义随着电子商......
  • Springboot计算机毕业设计网上电影购票系统8a3i3
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,影院信息,电影类型,热门电影,电影排期,最新电影,票房榜单开题报告内容一、课题名称网上电影购票系统设计和实现二、设计(论文)教学目标通过本课题的设计,旨......
  • kingbase——创建truncate函数
    写上一篇比较round函数与truncate函数时,顺手试了一下KINGBASE数据库,应该是没有TRUNCATE这个函数,要使用估计得手动创建。创建函数如下createorreplacefunctionsys.truncate(numeric,int4)returnsnumericasdeclarevaluenumeric;resultnumeric;beginva......
  • MySQL优化-explain:字段,索引相同的多个数据库为什么他们的type,key,key_len会不一样
    实习倒数第二天,偶然间查了查自己的写的sql语句性能有没有问题。selectCOL1,COL2,COL3frominf_logwhereCODE='AAA'andORDER_ID='123456';上述字段中,code与order_id都被设置为索引IDX_MIAN_ID,IDX_CODE。也就是说,正常情况下这两个索引应该是都会命中公司实现了表的水平......
  • explain工具分析
    explain关键字可以分析查询语句或结构的性能瓶颈当我们想要查询一条sql的执行计划时在该条sql语句前面加上explain关键字即可例如表的结构如下:DROPTABLEIFEXISTS`actor`;CREATETABLE`actor`(  `id`int(11)NOTNULL,  `name`varchar(45)DEFAULTNULL......
  • KingbaseES RAC 部署案例之---单节点部署案例
    案例说明:KingbaseESRAC在单节点上部署。适用版本:KingbaseESV008R006C008M030B0010操作系统:[root@node201KingbaseHA]#cat/etc/centos-releaseCentOSLinuxrelease7.9.2009(Core)集群节点信息:[root@node203~]#cat/etc/hosts.......192.168.1.203node203......