暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

深入理解亚信安慧AntDB-T数据库子计划的执行流程(3)

北陌 2023-12-07
76


AntDB Subplan节点执行流程

Subplan的状态初始化

AntDB中所有的plan执行都需要先执行初始化操作,生成对应的state。

EState是执行器Executor的记录状态,EState->es_param_exec_vals被当作是子计划和外层交换数据的通讯“中介”,在执行器初始化时,根据执行计划的参数个数初始化es_param_exec_vals,为每个参数生成一个空间。

 

在standard_ExecutorStart函数初始化es_param_exec_vals后,将调用InitPlan进行Plan的状态初始化,InitPlan内部会对所有的subplan进行初始化。

ExecInitNode会调用到ExecInitSubplan,在subplan的初始化过程中,会根据subplan->args进行一对一初始化,如下图的ExecInitExprList函数按照调用顺序:

ExecInitExprList->ExecInitExpr->ExecInitExprRec

 

根据调用到的具体参数类型,设置相应的opcode和获取执行函数,如ExecJustConst、ExecJustScanVarVirt等等。

初始化过程如下:


图10:参数初始化过程图

 

Subplan的执行流程

以上示例中,子计划最终嵌入在父Plan的列信息表达式中。执行计划如下:

执行正常的t表fetch

执行投影操作时,将触发子计划的执行链,从ExecScan一直到ExecProject,最终调用到ExecScanSubPlan

在ExecScanSubPlan中,启动真正的子计划执行

获取所需的外部参数

直接遍历参数列表,并执行相应的执行表达式(因为在上一步,所需的执行表达式已经存储在state中)

 

结论

至此,我们完整的梳理了AntDB-T 子计划依赖参数的生成和执行流程,纵览生成流程,可以清晰的理解参数的优化过程;从执行流程上来看又可以完整了解参数的初始化,执行函数设置以及最后的执行位置和执行流程,对工作中进行SQL语句的子计划执行和调优起到了较好的帮助作用。

 

关于亚信安慧AntDB数据库

AntDB数据库始于2008年,在运营商的核心系统上,为全国24个省份的10亿多用户提供在线服务,具备高性能、弹性扩展、高可靠等产品特性,峰值每秒可处理百万笔电信核心交易,保障系统持续稳定运行近十年,并在通信、金融、交通、能源、物联网等行业成功商用落地。

最后修改时间:2023-12-07 09:50:56
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论