接前面,在 PortalStart 中调用了 ExecutorStart,ExecutorStart 会调用 InitPlan:/* ---------------------------------------------------------------- * InitPlan * * Initializes the query plan: open files, allocate storage * and start up the rule manager * -----------------------------------------...
转载
2013-05-30 12:12:00
59阅读
2评论
接前面,继续观察 PortalStart,其中有: /* * Create QueryDesc in portal's context; for the moment, set * the destination to DestNone. */ queryDesc = CreateQueryDesc((PlannedStmt *) linitial(portal->stmts), ...
转载
2013-05-29 17:21:00
51阅读
2评论
前面说过 PortalStart明确执行策略后,要执行 ExecutorStart。那么ExecutorStart 到底作了什么呢。以下是缩略:/* ---------------------------------------------------------------- * ExecutorStart * * This routine must be called at the beginning of any execution of any * query plan * * Takes a QueryDesc previously crea...
转载
2013-05-22 13:57:00
37阅读
2评论
回到上一个层面,继续看 PortalStart的处理:voidPortalStart(Portal portal, ParamListInfo params, int eflags, bool use_active_snapshot){ ... PG_TRY(); { ... /* * Determine the portal execution strategy */ portal->strategy = ChoosePortalStrategy(portal->stmts); ...
转载
2013-05-29 16:41:00
57阅读
2评论
在定义了Portal之后,需要运行:PortalStart,它主要的任务是明确执行策略,然后再执行ExecutorStart:代码太长,进行缩略:voidPortalStart(Portal portal, ParamListInfo params, int eflags, bool use_active_snapshot){ ... PG_TRY(); { ActivePortal = portal; CurrentResourceOwner = portal->resowner; PortalContext ...
转载
2013-05-22 13:26:00
35阅读
2评论
接前面,回溯调用关系:exec_simple_query --> PortalStart --> ExecutorStart --> StandardExecutorStart --> InitPlan再回到 exec_simple_query 来:事前知道,表 tst04 对应的文件名为 16393。postgres=# select oid from pg_class where relname='tst04'; oid ------- 16393(1 row)postgres=# 看 exec_simple_query,加点调试信息:static
转载
2013-05-30 13:39:00
63阅读
2评论
前面已经说过,exec_simple_query要运行 PortalStart和 PortalRun。可以说,PortalRun是重头戏,sql的真正执行,就在这里完成。/* * PortalRun * Run a portal's query or queries. * * count <= 0 is interpreted as a no-op: the destination gets started up * and shut down, but nothing else happens. Also, count == FETCH_ALL is * interprete.
转载
2013-05-22 14:17:00
46阅读
2评论
现在,将要进入最为重要的部分:分析如何制作执行计划的。先把它简化,看看NodeTag 在 PortalStart 之前,是如何得到的。先找到第一个相关程序:每一种执行计划(结点单位),都有一个对应的path。/***************************************************************************** * PATH NODE CREATION ROUTINES *****************************************************************************//*...
转载
2013-06-03 17:08:00
52阅读
2评论
前面已经说过,在 exec_simple_query中,完成sql文的执行。具体地说,是要构造portal,然后运行PortalStart ,PortalRun...下面就先看看 portal如何构造:在 exec_simple_query中,有这么一段:1 /*2 * Create unnamed portal to run the query or queries in. If there3 * already is one, silently drop it.4 */5 portal = CreateP...
转载
2013-05-22 10:30:00
83阅读
2评论
除了DML之外的所有查询都通过ProcessUtility模块来执行,包括了各类DDL语句、事务相关语句、游标相关语句等。上层调用函数为exec_simple_query函数,其中PortalStart函数和PortalDrop函数部分较为简单。核心函数是PortalRun函数下层调用的standard_ProcessUtility函数,该函数通过switch case语句处理了各种类型的查询语句
转载
2022-11-15 20:14:18
56阅读
openGauss内核分析(九):数据库表的创建过程除了DML之外的所有查询都通过ProcessUtility模块来执行,包括了各类DDL语句、事务相关语句、游标相关语句等。上层调用函数为exec_simple_query函数,其中PortalStart函数和PortalDrop函数部分较为简单。核心函数是PortalRun函数下层调用的standard_ProcessUtility函数,该函数通
原创
2023-07-27 20:36:17
86阅读
在数据库中,除了DML之外的所有查询都通过ProcessUtility模块来执行,包括了各类DDL语句、事务相关语句、游标相关语句等。上层调用函数为exec_simple_query函数,其中PortalStart函数和PortalDrop函数部分较为简单。核心函数是PortalRun函数下层调用的standard_ProcessUtility函数,该函数通过switch case语句处理了各种类
除了DML之外的所有查询都通过ProcessUtility模块来执行,包括了各类DDL语句、事务相关语句、游标相关语句等。上层调用函数为exec_simple_query函数,其中PortalStart函数和PortalDrop函数部分较为简单。核心函数是PortalRun函数下层调用的standard_ProcessUtility函数,该函数通过switch case语句处理了各种类型的查询语句,包括事务相关查询、游标相关查询、schema相关操作、表空间相关操作、表定义相关操作等。
原创
2022-11-10 11:41:18
291阅读
GreenPlum orca优化器在何处产生执行计划并进行分发GP有两种优化器:PG的优化器和orca优化器。Master端简查询入口函数exec_simple_query开始生成执行计划并进行分发,如下图所示。在standard_planner函数中分为orca优化器和PG优化器2个分支产生执行计划。产生执行计划后,由函数PortalStart函数开始调用standard_ExecutorSta
原创
2022-02-20 15:27:34
368阅读