行执行器
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]
- 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)