文档中心MogDBMogDB StackUqbar
v5.0

文档:v5.0

支持的版本:

其他版本:

行存转向量化

可获得性

本特性自MogDB 3.0.0版本开始引入。

特性简介

由于行存执行引擎在执行包含较多表达式或者关联操作的复杂查询时,性能表现不佳。将行存表的查询转换为向量化执行计划执行,提升复杂查询的执行性能。

客户价值

能够有效提升复杂查询的查询性能。

特性描述

本特性通过对扫描算子增加一层RowToVec的操作,将行存表的数据在内存中变为向量化格式后,上层算子都能够转化为对应的向量化算子,从而使用向量化执行引擎计算。支持行转列的扫描算子包括:SeqScan、IndexOnlyscan、IndexScan、BitmapScan、FunctionScan、ValueScan、TidScan。

特性约束

  • 不支持向量化的场景包括:
    • targetList存在返回set的函数。
    • targetList或者qual中存在不支持向量化的表达式:数组类表达式计算;多子查询表达式计算;Field类表达式计算;系统表列。
    • 包含不支持向量化的类型:POINTOID;LSEGOID;BOXOID;LINEOID;CIRCLEOID;POLYGONOID;PATHOID;用户自定义类型。
  • MOT表不支持转向量化。
  • 需要开启向量化引擎,即设置enable_vector_engine = on

示例

  1. 创建表,插入数据,开启向量化引擎。

    -- 创建表,插入测试数据
     create table mogdb_rowtovec_1 (id int, rating int, match text);
     
     insert into
         mogdb_rowtovec_1
     values
         (
             generate_series(1, 20000),
             floor(random() * 100),
             'match# ' || generate_series(1, 113)
         );
     
     vacuum analyze mogdb_rowtovec_1;
     
     set enable_vector_engine = on;
  2. try_vector_engine_strategy = 'optimal' 时,优化器会根据语句需要处理的数据量,表达式复杂度,行列转换的开销等几个方面进行评估,最后根据代价自动选择是否需要向量化行存表计划。向量化的计划会被添加 Vector Adapter / Row Adaptor 算子用于行列转化。

    -- 设置向量化行为 Optimal
    set try_vector_engine_strategy = 'optimal';
     
    -- 简单批量处理场景下,未执行向量化行存表计划
    MogDB=# explain (costs off) select id, rating from mogdb_rowtovec_1; 
               QUERY PLAN
    ------------------------------
    Seq Scan on mogdb_rowtovec_1
    (1 row)
    
    -- 向量化场景,选择执行向量化行存表计划
    MogDB=# explain (costs off) 
     select
         sum(rating),
         avg(rating),
         sum(rating + 10),
         match
     from
         mogdb_rowtovec_1
     group by
         rating,
         match;
                        QUERY PLAN
     ------------------------------------------------
      Row Adapter
        ->  Vector Sonic Hash Aggregate
              Group By Key: rating, match
              ->  Vector Adapter(type: BATCH MODE)
                    ->  Seq Scan on mogdb_rowtovec_1
     (5 rows)
  3. MogDB 还支持 Force 模式( try_vector_engine_strategy = 'force' )。Force 模式下,优化器会在列存引擎支持的范围内激进的进行行列转换,同时忽略代价的影响。

    -- 设置向量化行为 Force
    set try_vector_engine_strategy = 'force';
    
    -- 重新执行简单批量处理场景
    MogDB=# explain (costs off) select id, rating from mogdb_rowtovec_1; -- 向量化
                     QUERY PLAN
    ------------------------------------------
     Row Adapter
       ->  Vector Adapter(type: BATCH MODE)
             ->  Seq Scan on mogdb_rowtovec_1
    (3 rows)

相关页面

enable_vector_engine

Copyright © 2011-2024 www.enmotech.com All rights reserved.