首页 > 其他分享 >数仓的等待视图中,为什么会有Hashjoin-nestloop

数仓的等待视图中,为什么会有Hashjoin-nestloop

时间:2024-02-28 09:12:10浏览次数:24  
标签:数仓 场景 Hashjoin 视图 nestloop hashjoin 内存

本文分享自华为云社区《GaussDB(DWS)等待视图之Hashjoin-nestloop》,作者:Arrow0lf。

1. 业务场景

众所周知,GaussDB(DWS)中有3种常见的join方式:HashJon/MergeJoin/NestLoop

但在有一些场景中,等待视图中等待状态会显示为:HashJoin-nestloop,如下图所示。这种表示什么含义?

2. 基本原理

为了明白该状态的原因,首先思考如下场景:当业务侧两张大表join时,如果由于未做analyze或统计信息不准,导致build hash的一侧选择了大表,且该表在join列上重复值很多,会导致hashjoin时内存膨胀,当内存不足时,hashjon算子会下盘,但是由于join列上存在大量重复值,下盘文件无法有效分裂,此时,如果将整个文件都读取到内存中,会导致内存占用很高,出现内存过载,导致其他业务内存不足报错。

为了解决该场景,在向量化hashjoin时,当使用内表创建的hash表过大导致内存不足时,不再强制进行hashjoin,会通过内外表交换或执行nestloop使查询平稳进行,防止出现内存报错,此时,等待视图状态为“HashJoin-nestloop”

上述特性通过hashjoin_spill_strategy参数控制,默认为0,取值范围为0-6的整数,详情可以参考产品文档(8.1.2及以上版本),简单来讲:

取值为0或5,hashjoin时会先尝试内外表交换,如果仍然内存占用高,会选择nestloop;

取值为1或6,hashjoin时会先尝试内外标交换,如果仍然内存占用高,会强行执行hashjoin;

取值为2,hashjoin行为和原本的行为保持一致,即使内存不够,也会强制执行hashjoin

3. 业务影响

当等待视图出现Hashjoin-nestloop时,可能会导致原来内存占用高,单能执行成功的语句,在被转换成nestloop后,可能会短时间执行不出来。尤其是当数据量变化较大,统计信息差异较大时,容易出现执行计划非最优场景下的性能劣化。

4. 解决方法

如果出现上述HashJoin-nestloop时间长,导致业务超时的情况。可以将参数hashjoin_spill_strategy设置为2进行规避。不再进行内外表交换或执行nestloop,使业务行为与之前的行为保持一致。

在内存充裕的场景下,可以全局设置为2。

 

点击关注,第一时间了解华为云新鲜技术~

 

标签:数仓,场景,Hashjoin,视图,nestloop,hashjoin,内存
From: https://www.cnblogs.com/huaweiyun/p/18038932

相关文章

  • SpringMVC系列之(九)响应数据和结果视图
    响应数据和结果视图1.返回值分类这里的返回值指的是Controller中的方法的返回值。1.1String该字符串为逻辑视图名,通过视图解析器解析为物理视图地址。注:底层调用的是ModelAndView1.1.1实际开发中的应用实体类index.jsp<%--CreatedbyIntelliJIDEA.User:商务......
  • 智慧安防平台easy1400视图平台设备级联的操作流程
    在当今数字化时代,视频直播和点播已经成为人们获取信息和娱乐消遣的重要方式。为了满足不同场景下的直播需求,EasyDarwin视频直播点播平台提供了功能强大的支持。本文将重点介绍在EasyDarwin平台上进行拉流转推流操作,并深入探讨推流名称、源地址、控制选项等关键要素。一、EasyDarw......
  • 智慧安防平台easy1400视图平台设备级联的操作流程
    在上级平台中设置级联信息首先,您需要登录上级平台系统并打开首页。在左侧菜单栏中选择“下级平台”,然后点击“添加”按钮。接着,会弹出一个名为“新增下级视图库”的对话框。在这个对话框中,需要填写以下信息: 视图库ID:填写获取的下级视图库ID,可从下级视图库首页获取。名称:自定......
  • 数仓实践丨从CU入手优化HStore表
    本文分享自华为云社区《GaussDB(DWS)存储引擎:从CU入手优化HStore表》,作者:yd_261437590。1.前言适用版本:【8.2.1(及以上)】HStore同时拥有处理传统TP场景的事务能力和强大的数据分析能力,但是强大的数据分析能力很可能被小CU问题给破坏,另外,将多个CU排序可以增加HStore的数据聚......
  • django如何将视图的数据表下载下来?(包括数据过滤)
    思路关键:django的视图本身返回的是json数据,而pandas本身就可以对json数据形成excel输出。所以,现在的关键是如何拿到需要的json数据?突破点:filterset还是serializers,都是可以支持手动使用的。defgenerate_queryset_excel(queryset,filterset_cls,serializer_cls,request=None......
  • MySQL进阶语法【视图 触发器 事务 存储过程 流程控制】
    MySQL进阶语法【一】视图【1】概念在MySQL数据库中,视图(View)是虚拟的表,其内容是基于执行特定查询所得到的结果集。视图是通过查询来定义的,它可以包含一个或多个表中的特定列,也可以包含计算字段、聚合函数等。视图并不实际存储数据,而是动态地从基本表中获取数据并进行组合,每当......
  • 智慧安防平台easy1400视图平台设备级联操作指南
    在当今数字化时代,有效的内容管理和设备协同已经成为企业和组织运营的关键因素。内容图库作为信息存储和展示的核心,为企业提供了便捷的视觉内容管理解决方案。与此同时,设备级联技术实现了不同平台和设备之间的高效协同工作。本文将深入探讨内容图库和设备级联技术的应用及优势。 ......
  • 智慧安防平台easy1400视图平台用户登录及设备注册功能详解
    用户登录视图库平台后,首先会看到一个整洁的首页界面,上面清晰地展示了各种功能菜单和操作按钮。在这里,用户可以轻松地进行以下操作:添加采集设备:选择左侧的“采集设备”菜单,并点击“添加”按钮。系统会弹出一个对话框,要求用户填写设备ID、名称和用户口令等信息。请确保设备ID的11~1......
  • 7,DNS VIEW 视图
    [root@VM-16-12-centosnamed]#[root@VM-16-12-centosnamed]#[root@VM-16-12-centosnamed]#cat/var/named/chroot/etc/named.conf////named.conf////ProvidedbyRedHatbindpackagetoconfiguretheISCBINDnamed(8)DNS//serverasacachingonlyna......
  • SQLServer创建用户限定特定视图或表
    --1、创建登录名CREATELOGINtest_userWITHPASSWORD='TEST1234!@#$';--2、创建数据库用户并关联登录名CREATEUSERtest_userFORLOGINtest_user;--3、设置视图View1、View2、View3权限。也可以通过界面右键视图-属性。grantselecton[dbo].[View1]totest_usergra......