一. 前言
openGauss向量化执行引擎是指原来计算过程中一行元组一行元组的处理的方式改成一批元组一批地处理,从而减少调用栈和CPU切换开销,一般在大数据量聚合查询中会有较大的性能提升。本文主要以向量化做sum聚合为例走读代码了解openGauss中是怎么实现向量化计算能力的。

向量化操作的执行计划如上所示,可以看到,向量化计算时,需要将tablescan的数据转成向量话数据计算,计算完成后再转成普通的行存数据输出。本文也按照这思路走读代码。
二. 生成向量化执行计划
执行计划生成是指将普通的执行计划转成向量化执行计划,入口在try_vectorize_plan中:
try_vectorize_plan
vectorize_plan
// 对各种算子进行向量化转换,以SeqScan为例
switch (nodeTag(result_plan)) {
case T_SeqScan:
make_rowtove_plan
make_rowtovec
RowToVec* node = makeNode(RowToVec); // 生成行转向量算子
plan->lefttree = lefttree;
}
if (IsVecOutput(top_plan))
top_plan = (Plan*)mak

最低0.47元/天 解锁文章
605

被折叠的 条评论
为什么被折叠?



