1. 首页
  2. 大数据

技术精讲:PostgreSQL执行计划explain

入口函数为ExplainOnePlan,他会创建一个查询描述结构queryDesc,然后进入执行器执行ExecutorStart、ExecutorRun、ExecutorFinish、ExecutorEnd。当然执行explain时可以添加analyze参数,当添加这个参数时才会执行ExecutorRun即真正执行该查询。

技术精讲:PostgreSQL执行计划explain

入口函数为ExplainOnePlan,他会创建一个查询描述结构queryDesc,然后进入执行器执行ExecutorStart、ExecutorRun、ExecutorFinish、ExecutorEnd。当然执行explain时可以添加analyze参数,当添加这个参数时才会执行ExecutorRun即真正执行该查询。

打印执行计划是由函数ExplainPrintPlan完成,该函数调用ExplainNode,由入参PlanState结构传递Plan tree。该PlanState有initPlan(非相关子查询)、lefttree、righttree、subPlan等。遍历计划树就是对这几个节点链进行递归遍历。可以看到,他打印完本节点信息后,若有左右子树则递归进行ExplainNode,然后对特殊节点进行特殊处理,使用ExplainMemberNodes、ExplainNode和ExplainCustomChildren函数进行处理。最后若有子计划则递归遍历subPlan。

详细打印信息可通过上面图的流程框架进入每个函数深入阅读理解。

GreenPlum的GPCC可以动态以树的形式打印执行计划,显示执行计划执行的进度。理解explain如何打印执行计划及这些节点怎么遍历后,可以更加方便理解推测GPCC打印执行计划的机制(因为gpcc还未开源)。

同时执行计划的执行时间从什么时候开始,到什么时候结束,也可以通过函数ExplainOnePlan看INSTR_TIME_SET_CURRENT(starttime);类似的时间。

免责声明:本站旨在传递信息,不代表有传资讯的观点和立场。本站遵循行业规范,如转载您的文章未标注版权,请联系我们(QQ:78799268)改正。本站的原创文章,如若转载,请注明出处:http://www.ainoline.cn/dashuju/18042.html

发表评论

邮箱地址不会被公开。 必填项已用*标注

联系我们

在线咨询:点击这里给我发消息

邮件:78799268@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code