Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Executor

执行器生命周期

阶段核心函数关键动作节点操作
InitExecutorStart
解析计划树,构建运行时状态树,打开表,编译表达式。ExecInitNode: Plan -> PlanState
RunExecutorRun
循环拉取数据,逐行处理,发送给客户端ExecProcNode: TupleTableSlot, ExprContext
FinishExecutorFinish执行排队的 AFTER 触发器,更新统计信息AfterTriggerEndQuery
EndExecutorEnd
关闭文件/扫描描述符,销毁临时占用资源ExecEndNode

执行流程梳理

/* ... */

/* Portal & Executor */
CreatePortal

PortalDefineQuery // portal->stmts = plantree_list;

PortalStart // Prepare a portal for execution. params, strategy, queryDesc
	ExecutorStart // prepare the plan for execution
		standard_ExecutorStart
			InitPlan /* Initialize the plan state tree */
				**ExecInitNode** | ExecInitSeqScan
					ExecOpenScanRelation
	PORTAL_READY

PortalRun | PortalRunSelect

	/* Executor */
	ExecutorRun | tandard_ExecutorRun | ExecutePlan // Processes the query plan until retrieved 'numberTuples' tuples
		**ExecProcNode** | ExecSeqScan
			ExecScan | ExecScanFetch | SeqNext // executor module
				/* Access + Storage*/
				table_scan_getnextslot | heap_getnextslot | heapgettup_pagemode
					heapgetpage | ReadBufferExtended | ReadBuffer_common
PortalDrop
	PortalCleanup
		ExecutorFinish
			ExecPostprocessPlan
			AfterTriggerEndQuery
		ExecutorEnd
			ExecEndPlan
				**ExecEndNode** | ExecEndSeqScan
		FreeQueryDesc