1、什么是 In-Memory 深度矢量化(Deep Vectorization)
In-Memory 深度矢量化是一个基于 SIMD 的框架,它为查询计划中的高级查询运算符支持矢量化。该框架包括SIMD、硬件加速和流水线执行等优化。
In-Memory 矢量化连接特性是深度矢量化框架的关键。通过使用SIMD向量处理,该框架优化了哈希联接的各个方面,例如哈希、构建、探测和收集。此优化可以将联接处理的性能提高100%或更多。 In-Memory 矢量化联接功能对用户是透明的,不需要更改计划。默认情况下启用优化,可以通过将 INMEMORY_DEEP_VECTORIZATION 初始化参数设置为 false 来禁用优化。
2、内存中深度矢量化如何工作
In-Memory 深度矢量化框架将高级、复杂的SQL运算符(例如,哈希联接)分解为较小的内核大小的单元。
解构的内核适用于SIMD矢量化技术。 数据库以流水线方式执行内核,以加速整体操作。
3、内存中矢量化联接的工作方式
向量化联接功能是内存中深度向量化框架的关键方面。
In-Memory 矢量化连接的工作方式如下:
注意:由于在运行时选择了矢量化联接操作,因此执行计划中仍显示未优化。
内存中矢量化连接可能会利用内存中的功能,例如:
4、深度矢量化的用户接口
当 INMEMORY_DEEP_VECTORIZATION 初始化参数为 true(默认值)时,将启用深度矢量化框架。
您可以使用 SQL Monitor 来确定查询是否使用矢量化联接。在“SQL Monitor”报告中,单击“Information”列中“HASH JOIN”操作旁边的双筒望远镜图标。如果 DeepVec Hash Joins 的值为1,则查询使用深度矢量化;否则,查询使用深度矢量化。否则,查询不使用它。
5、In-Memory 矢量化连接示例
此示例说明了哈希联接如何从深度矢量化中受益。
在此示例中,存在一个客户(customers)和订单表(orders),并且 INMEMORY_DEEP_VECTORIZATION 当前设置为 false。您的目标是计算单个国家/地区内的订单,并尽可能使用深度矢量化优化。
SQL
SELECT /*+monitor */ COUNT(*)
FROM tpch.customer c, tpch.orders o
WHERE c.c_custkey = o.o_custkey
AND c.c_nationkey = 21