首页 > 其他分享 >并发的NLJOIN导致Hash bucket group latch竞争

并发的NLJOIN导致Hash bucket group latch竞争

时间:2024-03-20 14:12:17浏览次数:27  
标签:执行 group db2pd bucket SQL Hash latch NLJOIN

并发的NLJOIN导致Hash bucket group latch竞争

https://www.ibm.com/support/pages/node/296563

Troubleshooting


Problem

并发运行执行计划里面有NLJOIN的SQL导致了Hash bucket group latch的竞争,性能降低。

Symptom

db2pd -latch 输出能看到大量SQLO_LT_SQLB_HASH_BUCKET_GROUP_HEADER__groupLatch等待的情况:



latch的所有者和等待者的堆栈里面能找到Nljn的字符:

0x0900000022CF2884 sqlriNljnNonPiped__FP8sqlrr_cb + 0x458
0x0900000022D8ED30 sqlriNljnNonPiped__FP8sqlrr_cb + 0x210
0x0900000023640A44 sqlrihsjn__FP8sqlrr_cb + 0x7A8

Cause


该问题的发生往往满足下面两个条件:

1. 出问题的SQL是并发执行的;

2. 出问题SQL的执行计划有个NLJOIN, 这个NLJOIN左边返回行数较多,右边常常是一个INDEX SCAN, 且这个INDEX SCAN访问的页数较少。

Db2在执行Nested Loop Join时, 会对Join左边结果的每一行执行右边的操作一次, 如果左边行数较多,且右边是一个访问较少索引页的INDEX SCAN操作,再加上对应SQL是并发执行的,这会极大增加Hash bucket group latch的竞争,导致了问题的发生。

注意, 不管是数据页,还是索引页,在Buffer Pool里面都是以Hash Bucket结构存放, 而Hash bucket group latch保证了多线程(及EDU)间对Hash Bucket的顺序安全访问及更改。

Diagnosing The Problem

首先搜集这些数据:

db2pd -latch -repeat 10 3

db2pd -stack all -repeat 10 3

db2pd -d <db name> -api

从db2pd -latch输出确认是不是有该latch的竞争, 从db2pd -stack输出文件看latch的所有者和等待者的堆栈里面是否有Nljn的字符, 从db2pd -api的输出中尝试找到latch的所有者和等待者正在执行的SQL。

找到SQL后,生成它的执行计划,看看是否有NLJOIN. 你还可以使用db2caem工具获取执行计划里面各个操作实际返回的行数:

db2caem -db <db name> -sf sql.txt

注意: 你需要把出问题的SQL放到sql.txt里面,以分号结尾; 这个命令会真正执行这个SQL,并产生该SQL的执行计划,该执行计划里面会显示每个操作的实际返回行数。 样例:

Resolving The Problem

1. 检查出问题SQL的执行计划,看看优化器为什么选择NLJOIN, 是不是统计信息过时? 另一方面, 可以通过SELECTIVITY调整对应条件评估的返回行数以避免优化器选择NLJOIN; 或者通过optimize guidline强制使用别的Join类型(比如HSJOIN)。

2. 从10.5 FP8我们新加了一个注册变量,它可以缓解当上诉条件1和2满足时groupLatch的竞争:


db2set DB2_EXTENDED_OPTIMIZATION=NJFLS
需要重启Db2生效。

db2set -im DB2_EXTENDED_OPTIMIZATION=NJFLS
加上-im后不需要重启Db2生效。

上面是在实例级设置这个变量,你要可以通过optimizer guideline对某个特定STATEMENT开启这个变量:
#开启optimizer guideline
db2set -im DB2_OPTPROFILE=YES

#把下面的guideline加到STATEMENT的最后面:
/*<OPTGUIDELINES>
<REGISTRY>
<OPTION NAME='DB2_EXTENDED_OPTIMIZATION' VALUE='NJFLS'/>
</REGISTRY>
</OPTGUIDELINES>*/

3. 升级到版本11.1, 该版本有对此类问题有优化 - 该latch不再只有排它模式了,增加了共享模式。详见: https://www.ibm.com/support/knowledgecenter/SSEPGG_11.1.0/com.ibm.db2.luw.wn.doc/doc/c0023240.html

 

Related Information

英文版

 

Document Information

More support for:
Db2 for Linux, UNIX and Windows

Software version:
9.8, 9.7, 10.1, 10.5, 11.1

Operating system(s):
AIX, Linux, Windows

Document number:
296563

Modified date:
19 April 2020

标签:执行,group,db2pd,bucket,SQL,Hash,latch,NLJOIN
From: https://www.cnblogs.com/z-cm/p/18085073

相关文章

  • mongo GridFSBucket
    1、描述:mongo  单机使用 GridFSBucket2、pox中添加jar<dependency><groupId>org.mongodb</groupId><artifactId>mongo-java-driver</artifactId><version>3.12.9</version></dependency>3、module中使用,直接上代码 3.1......
  • Windows 系统中进行一些域管理操作 net group /domain 命令 参数
    Windows系统中进行一些域管理操作。以下是一些常见的用法和参数:列出所有域用户组:bashCopyCodenetgroup/domain查看特定用户组的成员:bashCopyCodenetgroup"GroupName"/domain添加用户到指定用户组:bashCopyCodenetgroup"GroupName"UserName/add/domain......
  • 前端路由history路由和hash路由的区别?原理?
    前端路由是指在单页应用程序(SPA)中通过改变URL路径来实现页面切换和导航的机制。在前端开发中,有两种主要的前端路由实现方式:基于HistoryAPI的路由(history-basedrouting)和基于哈希(Hash)的路由(hash-basedrouting)。基于HistoryAPI的路由(history-basedrouting):Histor......
  • WPF —— ListBox控件、GroupBox控件详解
    1、ListBox介绍  ListBox是一个ItemsControl,这意味着它可以包含任何类型的对象的集合(,例如字符串、图像或面板)。  一个ListBox中的多个项是可见的,与仅ComboBox具有所选项可见的项不同,除非IsDropDownOpen属性为true。该SelectionMode属性确定一次是否......
  • C# ArrayList、HashSet、HashTable、List、Dictionary的区别
    在C#中,数组由于是固定长度的,所以常常不能满足我们开发的需求。由于这种限制不方便,所以出现了ArrayList。ArrayList、List<T>ArrayList是可变长数组,你可以将任意多的数据Add到ArrayList里面。其内部维护的数组,当长度不足时,会自动扩容为原来的两倍。但是ArrayList也有一个缺点,......
  • 学习JavaEE的日子 Day27 手撕HashMap底层原理
    Day271.手撕HashMap底层原理(重点)publicclassTest01{ publicstaticvoidmain(String[]args){ // Floatfloat1=newFloat("0.0f");// Floatfloat2=newFloat("0.0f");// Floatresult=float1/float2;// System.out.println(result);/......
  • 8--哈希表Hash的相关操作
    哈希表(Hashtable)是一种数据结构,用于实现键值对的存储和查找。其中直接地址法、数字分析法、平方取中法、折叠法、除留余数法、随机数法都可以作为哈希表的散列函数。直接地址法是唯一一个不会产生冲突的方法,因为它是线性的,每一个数都有对应的地址,所有就不会产生冲突,但是空间......
  • 常用加密及其相关的概念、简介(对称、AES、非对称、RSA、散列、HASH、消息认证码、HMAC
    PS:要转载请注明出处,本人版权所有。PS:这个只是基于《我自己》的理解,如果和你的原则及想法相冲突,请谅解,勿喷。环境说明  无前言  在之前,一直是通过生活、工作零零碎碎接触过加密及加密算法相关的信息,但是也只是听说过,并不知道这些算法用处和区别。  最近由于工作安......
  • MySQL错误-this is incompatible with sql_mode=only_full_group_by完美解决方案
    解决方案一:使用函数ANY_VALUE()包含报错字段SELECTANY_VALUE(ID),USER_ID,ANY_VALUE(problems),ANY_VALUE(last_updated_date)FROMt_iov_help_feedbackGROUPBYUSER_ID; 解决方案二:通过sql语句暂时性修改sql_mode去掉ONLY_FULL_GROUP_BY,重新设置SET@@global.sql_m......
  • sql case when, Exist ,group by ,聚合
    selectcm.heatno,cm.lotheatno,cm.heatorder,max(cm.cutdate)cutdate,cm.cutdimensiona,cm.cutdimensionb,cm.length,sum(cm.weight/1000)weight,sum(cm.weightw......