前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >In-Memory 深度矢量化(Deep Vectorization)

In-Memory 深度矢量化(Deep Vectorization)

作者头像
Grainger
发布2022-04-24 10:02:31
8140
发布2022-04-24 10:02:31
举报
文章被收录于专栏:数据与未来数据与未来

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 矢量化连接的工作方式如下:

  • 在运行时,数据库决定哈希联接是否将从 In-Memory 深度矢量化中受益。 如果是这样,则数据库进行到下一步。

注意:由于在运行时选择了矢量化联接操作,因此执行计划中仍显示未优化。

  • 数据库将连接处理下推给扫描运算符,以便直接在内存中的列数据格式上进行评估。
  • 该操作使用SIMD优化的哈希表数据结构,而不是传统的哈希表。
  • 数据库从联接的左侧和右侧确定匹配的行,并使用矢量化技术将它们发送回父SQL运算符。

内存中矢量化连接可能会利用内存中的功能,例如:

  • 加入群组 如果声明了连接组,则使用深度矢量化的连接处理可能会明显更快。
  • IM 动态扫描 使用轻量级线程在扫描运算符中进一步并行化连接处理。
  • 聚合下推 连接中的聚合通过连接操作进行矢量化。
  • 内存中列压缩格式 向量化联接功能极大地利用了列式数据格式。

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。您的目标是计算单个国家/地区内的订单,并尽可能使用深度矢量化优化。

  • 1.以管理用户DB1身份登录数据库。
  • 2.使用 ALTER SESSION,将 INMEMORY_DEEP_VECTORIZATION 初始化参数设置为 ENABLE。
  • 3.如下所示连接 tpch.customer 和 tpch.orders 表,并过滤 tpch.customer.c_nationkey 列中为 21 的值:

SQL SELECT /*+monitor */ COUNT(*) FROM tpch.customer c, tpch.orders o WHERE c.c_custkey = o.o_custkey AND c.c_nationkey = 21

  • 4.要使用 HTML 创建 SQL Monitor 报表,请将 SQL ID 传递到 DBMS_SQL_MONITOR.REPORT_SQL_MONITOR。
  • 5.在浏览器中打开“SQL Monitor”报告。
  • 6.在报表的“详细信息(Details)”部分中,找到“HASH JOIN”操作,然后单击“双筒望远镜”图标。
  • 7.在“其他信息(Other Information)”窗口中,查找“DeepVec Hash Joins”。因为该值为1,所以数据库使用了 In-Memory 矢量化联接。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 山东Oracle用户组 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档