可获得性
本特性自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。
示例
-
创建表,插入数据,开启向量化引擎。
-- 创建表,插入测试数据 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; -
当
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) -
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)
相关页面
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




