本页目录

执行器框架

行执行器

ModifyTable

OpenGauss

/* ----------------------------------------------------------------
 *	   ExecModifyTable
 *
 *		Perform table modifications as required, and return RETURNING results
 *		if needed.
 * ----------------------------------------------------------------
 */
static TupleTableSlot* ExecModifyTable(PlanState* state)

列执行器

SQL Bypass(OpFusion)

在典型的OLTP场景中,简单查询占了很大一部分比例。这种查询的特征是只涉及单表和简单表达式的查询,因此为了加速这类查询,提出了SQL by pass框架,在parse层对这类查询做简单的模式判别后,进入到特殊的执行路径里,跳过经典的执行器执行框架,包括算子的初始化与执行、表达式与投影等经典框架,直接重写一套简洁的执行路径,并且直接调用存储接口,这样可以大大加速简单查询的执行速度。[^sqlbypass]

https://3ms.huawei.com/next/groups/index.html#/wiki/detail?groupId=3951558&wikiId=7790378&&for_statistic_from=all_group_wiki
  • SelectFusion
  • InsertFusion
  • UpdateFusion
  • DeleteFusion
  • AggFusion
  • SortFusion

执行器加锁示例

增删改加锁

INSERT/UPDATE/DELETE加三级锁

OpenGauss

void InitPlan(QueryDesc *queryDesc, int eflags)
                resultRelation = heap_open(resultRelationOid, RowExclusiveLock);

SELECT加锁

SELECT:没有result relation,不进这个分支,目标表通过 planner 的 ExecCheckLockRelations 或 RangeTblEntry 加 AccessShareLock(1)