openGauss源码解析(111)

openGauss源码解析:执行器解析(4)

7.2 执行流程

整个执行器的执行流程主要包括了策略选择模块Portal、执行组件executor和ProcessUtility,如图7-3所示。下面逐个进行介绍。

图7-3 执行器总体执行流程

7.2.1 Portal策略选择模块

Portal是执行SQL语句的载体,每一条SQL对应唯一的Portal,不同的查询类型对应的Portal类型也有区别,如表7-3所示。SQL语句经过查询编译器处理后会生成优化计划树或非优化计划树,是执行器执行的“原子”操作,执行策略根据需要选择SQL的类型、调用相应的模块。Portal的生命周期管理在exec_simple_query函数中实现,该函数负责Portal创建、执行和清理。Portal执行的主要执行流程包括PortalStart函数、PortalRun函数、PortalDrop函数几个部分。其中PortalStart函数负责进行Portal结构体初始化工作,包括执行算子初始化、内存上下文分配等;PortalRun函数负责真正的执行和运算,它是执行器的核心;PortalDrop函数负责最后的清理工作,主要是数据结构、缓存的清理。

表7-3 Portal类型

Portal类别

SQL类型

PORTAL_ONE_SELECT

SQL语句包含单一的SELECT查询

PORTAL_ONE_RETURNING

INSERT/UPDATE/DELETE语句包含Returning

PORTAL_ONE_MOD_WITH

查询语句包含With

PORTAL_UTIL_SELECT

工具类型查询语句,如explain

PORTAL_MULTI_QUERY

所有其他类型查询语句

数据库中的查询主要分为两大类,DDL(CREATE、DROP、ALTER等)查询和DML(SELECT、INSERT、UPDATE、DELETE)查询。这两类查询在执行器中的执行路径存在一定的差异。下面分别介绍这两类查询的主要函数调用关系。

posted @ 2024-04-30 10:35  openGauss-bot  阅读(10)  评论(0)    收藏  举报