首页>热点资讯>正文

PostgreSQL执行引擎中的Portal详解及其核心功能

2024-05-01 07:28 来源:网络

PostgreSQL执行引擎中的Portal详解及其核心功能

一、Portal的角色与作用

在PostgreSQL数据库中,执行引擎扮演着连接查询引擎与存储引擎的关键角色,它依据查询引擎提供的执行计划执行任务并获取数据。其中,Portal作为执行引擎的接入点,承载着至关重要的使命。当SQL语句经过查询引擎的词法分析、语法解析、查询优化和访问路径构建后,Portal会决定执行路径,并将执行结果返回给用户,进而完成数据存取的过程。

二、Portal的核心职能与策略选择

Portal,亦称为策略选择模块,其关键功能在于根据不同类型的SQL语句选择相应的执行模块(如ProcessUtility、Executor等)。SQL语句可分为两大类别:可优化语句(如DML操作)和数据定义语句(如DDL、DCL)。

三、Portal内核结构与执行流程

入口层

Portal有两个主要入口点:QD执行通过exec_simple_query进入,而QE执行则经由exec_mpp_query进入。接着,Portal基于语句类型作出决策,调用不同执行器结构,如ProcessUtilitySlow(用于事件触发类语句)、ExecutorStart、ExecutorRun(执行各节点以获取数据)和ExecutorFinish(用于ModifyTable节点)。


Portal层级

Portal在执行引擎中起到承上启下的作用:一方面,它保存了来自优化器的信息;另一方面,它储存执行引擎相关的结构,同时还保留一些基础结构和游标结构。其核心策略主要包括:PORTAL_ONE_SELECT、PORTAL_ONE_RETURNING、PORTAL_ONE_MOD_WITH、PORTAL_UTIL_SELECT和其他复杂组合。




四、Portal生命周期与状态转换

Portal经历了从新建(PORTAL_NEW)至定义(PORTAL_DEFINED),再到准备就绪(PORTAL_READY)、排队(PORTAL_QUEUE)、活动(PORTAL_ACTIVE)、完成(PORTAL_DONE)及失败(PORTAL_FAILED)等一系列状态变化。

五、游标(Cursor)管理

打开游标

通过声明游标(Cursor),可以实现对查询结果的分批读取。当执行DECLARE CURSOR命令时,系统会识别语句类型,调用一系列处理逻辑,包括查询、优化器优化以及Portal的创建和启动。


关闭游标

关闭游标即关闭对应的Portal,通过调用PerformPortalClose实现。这包括对单个游标(按名称指定)或所有非活跃游标的关闭。


FETCH与MOVE操作

FETCH和MOVE语法分别用于从游标中检索数据或重新定位游标而不检索数据。无论是FETCH还是MOVE,它们都将通过PerformPortalFetch实现,依据指定的Cursor名称找到对应的Portal并获取结果。


六、Portal的内存管理与限制

PostgreSQL限制每个用户最多能打开16个Portal。为了有效管理这些资源,Portal内部实现了包括查找、插入和删除在内的内存管理宏。

小编建议,Portal作为执行引擎的基础组成部分,它的核心功能涵盖了策略选择、启动执行器以及设置游标等功能。根据不同类型的SQL语句,Portal能够灵活选择适合的执行路径,确保数据存取工作的高效完成。

文章内容来源于网络,不代表本站立场,若侵犯到您的权益,可联系多特删除。(联系邮箱:[email protected]