oracle dump enq hw,经典故障分析 - ASSM引发的索引争用与 enq HW -contentio

0818b9ca8b590ca3270a3433284dd417.png

作者介绍:

孙加鹏 云和恩墨技术顾问

六年Oracle技术顾问经验,所服务的行业包括电信运营商、金融业、制造业等。

擅长Oracle的故障诊断、高可用架构、升级迁移等。目前主要服务于上海金融类客户。

1

故障概述

2017年07月24日11:58左右,客户核心数据库出现大量活动会话,导致数据库负载急剧加大,从而导致业务出现延时,DBA通过查看SESSION信息发现有大量的“enq: HW - contention”等待事件。

一直持续约有3分钟,数据库负载下降:

0818b9ca8b590ca3270a3433284dd417.png

下面是详细的故障分析诊断过程,以及详细的解决方案描述。

2

故障分析

1

故障现象

ENMODB数据库出现大量活动会话,数据库负载急剧加大,通过V$SESSION能看到大量enq:HW contention的活动会话信息,客户紧急采集了ASH信息,方便后期故障分析。

2

分析过程

从AWR和ASH两个维度来分析此故障,先整体后局部,首先从AWR分析入手。

1、AWR分析

首先看一下故障时间段的AWR报告:

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

半小时的采样时间,DB Time 215mins,其中等待时间“enq: HW - contention”占据近36%,为TOP 10 events中最主要的非空闲等待事件。

0818b9ca8b590ca3270a3433284dd417.png

等待事件“enq: HW - contention”的解释:

The HW enqueue is used to manage the allocation of space beyond the high water mark of a segment. The high water mark of a segment is the boundary between used and unused space in that segment. If contention is occurring for "enq: HW - contention" it is possible that automatic extension is occuring to allow the extra data to be stored since the High Water Mark has been reached. Frequent allocation of extents,reclaiming chunks,and sometimes poor I/O performance may be causing contention for the LOB segments high water mark.

The HW enqueue is used to serialize the allocation of space beyond the high water mark of a segment. If lots of data is being added to an object concurrently, then multiple processes may be trying to allocate space above the high water mark at the same time, leading to contention.

简而言之,HW锁是在分配高水位线以上的空闲空间时,多个进程同时为了分配高水位线上空闲空间而修改HWM,修改HWM需要持有HW锁,该锁又属于排他锁(mode=6)。

如果大量数据被并发插入某个对象时,那多个进程可能会试图在高水位线以上同时申请可用空间,大并发的申请HW锁,从而导致HW enqueue争用。HW – contention等待事件的P1,P2,P3参数参考下表;

Event

P1 Parameter

P2 Parameter

Parameter 3

enq: HW - contention

name|mode

table space

# block

0818b9ca8b590ca3270a3433284dd417.png

发现这个时间段确实有大量的INSERT操作,半小时采用中,该SQL执行了约近24w次。

下一步看看HW竞争是在表段还是在索引段上?

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

大量的物理读/物理写请求也都发生在表TAB_ENMO的索引上。这里可以猜测HW竞争可能不在表上,而在这几个索引上面,IO读写请求非常高。

2、ASH分析

通过客户采集的ASH分析发现,等待事件“enq: HW - contention”是从07月24日11:57:12秒左右开始的,此类session全部被session id为1191的会话阻塞。

0818b9ca8b590ca3270a3433284dd417.png

查看1191会话信息,发现11:57:12的时候没有被任何会话阻塞(NOT IN WAIT),Session状态是ON CPU:

0818b9ca8b590ca3270a3433284dd417.png

这个时间点11:57:12的时候会话1191在执行以下的INSERT操作,这个就是源头,并且这个SQL一直在执行。

0818b9ca8b590ca3270a3433284dd417.png

INSERT操作从11:57:11开始,后续该会话一直都是HW竞争,并且跟其他SESSION争相持有HW锁。

0818b9ca8b590ca3270a3433284dd417.png

这个时间点大量的SESSION都在持续申请HW锁,因此都在相互blocking sessions。从p1,p2,p3参数中发现P3值并不代表争用块的RDBA(data block address)(36730这个值太小了,这是为啥?先思考下)。

0818b9ca8b590ca3270a3433284dd417.png

既然P3找不到RDBA,那就从ash中字段CURRENT_FILE#和CURRENT_BLOCK#上寻找争用块:

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

发现所有的HW竞争都发生在索引IDX_TAB_ENMO_SEQ上,该索引就是表TAB_ENMO上的索引,HW竞争的SQL语句也是上面AWR中发现的SQL。

0818b9ca8b590ca3270a3433284dd417.png

既然是大并发持有HW锁,多个进程是持续不断的申请HW锁,说明不断的发现free space不足,一般ASSM管理都是一次性分配多个extent,根据对象大小一个extent下面又会有多个block。除非指定storage参数next size 大小:

0818b9ca8b590ca3270a3433284dd417.png

表空间ENMO_DATA是ASSM(自动段空间管理),并且是本地管理表空间,获取表空间的定义语句:

0818b9ca8b590ca3270a3433284dd417.png

表空间自动扩展NEXT SIZE 100M。段管理方式使用自动段空间管理(ASSM)。这里有个地方值得关注下,这个表空间属于bigfile tablespace,这就是为什么通过等待事件中的p1,p2,p3参数无法精确定位到具体发生争用的block了。

具体可以参考Mos文档:ID 2098543.1。

因此上面的P3参数指的datafile中的block number,其实就是这个索引段的段头(segment header)所在的block。

0818b9ca8b590ca3270a3433284dd417.png

所以HW竞争还是发生在索引的段头上,因为段头会记录HWM信息,进程修改HWM就必须要持有HW锁,并修改索引段头上的HWM。所以P3=36730是准确的,只是这个P3参数代表是bigfile tablespace上的block number,dump出file_id=6 block_id=36730的块,可以看出就是索引IDX_TAB_ENMO_SEQ的Segment header。

现在问题基本明朗了,所有的争用都发生在索引的Segment Header上面,进程为了需要更多的空间(unformatted),通过持有HW锁来修改高水位线(HWM),大量的进程并发从而导致HW锁上的竞争。

那既然是ASSM管理,为何新的extent分配的时候还会出现HWM上的竞争呢?不都是bitmap管理了吗?比之前freelist管理要好很多啊,看看这个索引的DDL语句:

0818b9ca8b590ca3270a3433284dd417.png

索引的stroage参数中NETX=1M,即每次分配空间以每次1M大小来分配,8k块大小即相当于每次分配

128个blocks。难道是客户创建索引的时候指定extent分配大小?问题是不是发生在这个NEXT 1M上面呢?

显然不是的,自动段管理表空间(ASSM)下这个NEXT扩展字句应该是不生效的,不会按照这样来初始化extent的。

可以检查下索引的extent分布,看看extent下面包含多少个blocks。

0818b9ca8b590ca3270a3433284dd417.png

上面信息可以看出索引的extent并不是只有128个块,跟ASSM的extent分配机制匹配的,segment后期会按照64M的大小分配extent,即每个extent有64*1024/8=8192个block。

7月24日故障之后几天,又不间断的出过2~3次同样的故障,那为何不间断的会发生这种故障?索引真的有这么需要unformatted空间吗?表上有大量的INSERT操作的同时也需要维护索引,同时索引也会进行分裂,不论是leaf node split还是branch node split,都需要新块来满足分裂,实验证明索引分裂只请求unformatted的块,未满块或空闲块都不会使用。下面来看看索引上unformatted块的使用情况,这个show_space存储过程来自TOM大师的分享:

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

同时12点12分左右又出现一次HW竞争严重的情况,导致AAS飙高,系统负载急剧升高。因此每次出现HW竞争都是因为Unformatted Blocks不够用的时候,多个进程修改索引段头的HWM的时候持有HW锁。

所以问题原因主要是多个进程同时修改索引段头上的HWM而导致的争用,针对这种问题一般采用HASH分区索引,通过将索引改造成HASH分区索引来缓解索引段头的争用,这样从原来的在单个段头修改HWM,到现在的在多个分区索引的段头上修改HWM。将原先索引从一个L3位图管理块,到多个L3层位图管理块。

先看一下ASSM的extent三层位图管理结构:

0818b9ca8b590ca3270a3433284dd417.png

整个位图三级位图结构是一个树形结构,L3往往代表的就是Segment Header,L3中记录了所包含的所有L2位图块的地址,L2位图块中又包含了所属L1位图块地址。L1位图块中记录了具体数据块的地址和使用情况。

L3,L2,L1三层结构均以树形结构,一对多的关系。

下面我们来dump出索引的段头(Segment Header)信息。

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

索引目前已经有2323个extents,现在的高水位线在extent_id 2322 block_id 8192位置。”L2 Hint for inserts”这表名INSERT插入的记录从这个L2(后面跟的是bigfile的block_id)开始。

Dump出这个L2位图块:

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

如上,这个L2中包含有1007个L1,free L1有77个,L1共有三个状态值,分别为Free 1,Free 3和Free 5,3和5都代表该L1下面有空块。

0818b9ca8b590ca3270a3433284dd417.png

ASSM管理表空间的Table Block的状态有7种,分别是:

0 = unformatted

1 = logically full (per pctfree)

2 = 0-25% free

3 = 25-50% free

4 = 50%-75% free

5= 75-100% free

对于Block的DUMP有兴趣的可以研究研究。

4

故障解决

问题原因主要是多个进程同时修改索引段头上的HWM而导致的争用,针对这种问题一般采用HASH分区索引,通过将索引改造成HASH分区索引来缓解索引段头的争用,这样从原来的在单个段头修改HWM,到现在的在多个分区索引的段头上修改HWM。

引入思考,当初设计表的时候,从业务角度出发,知道这是一个业务流水表,流水表的特点就是大量的DML操作,特别是INSERT操作的存在,表级别做了分区设计,索引上未考虑到位采用了普通索引,导致后期性能下降和故障发生。因此好的数据库结构设计是有多么重要。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/440443.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【ZOJ - 3946】Highway Project(最短路子图,维护双权值,贪心,最小树形图)

题干: Edward, the emperor of the Marjar Empire, wants to build some bidirectional highways so that he can reach other cities from the capital as fast as possible. Thus, he proposed the highway project. The Marjar Empire has N cities (including…

【ZOJ - 3956】Course Selection System(01背包)

题干: There are n courses in the course selection system of Marjar University. The i-th course is described by two values: happiness Hi and credit Ci. If a student selects m courses x1, x2, ..., xm, then his comfort level of the semester can be…

Linux把文件移动到容器外,Docker容器与主机之间拷贝文件的方法

一般情况下,我们在启动Docker容器的时候可以使用-v参数映射宿主机的文件或者目录到容器里,这样的话,在宿主机相关目录下的文件修改会自动在容器里生效。但是,如果我们已经启动了一个容器的话,就只能使用下面的这种方式…

【计蒜客 - 2019南昌邀请赛网络赛 - H】Coloring Game(找规律,思维dp)

题干: David has a white board with 2 \times N2N grids.He decides to paint some grids black with his brush.He always starts at the top left corner and ends at the bottom right corner, where grids should be black ultimately. Each time he can mov…

【HDU - 6514】Monitor(二维差分,前缀和)

题干: Monitor Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 163840/163840 K (Java/Others) Total Submission(s): 872 Accepted Submission(s): 145 Problem Description Xiaoteng has a large area of land for growing crops, and the land…

【CodeForces - 1153D】Serval and Rooted Tree(树形dp)

题干: Now Serval is a junior high school student in Japari Middle School, and he is still thrilled on math as before. As a talented boy in mathematics, he likes to play with numbers. This time, he wants to play with numbers on a rooted tree. …

实验楼Linux基础挑战2答案,实验楼-Linux基础-实验二 Linux的基本概念及操作

一、实验介绍1.1 实验内容实验楼环境介绍常用 Shell 命令及快捷键Linux 使用小技巧1.2 实验知识点Linux 基本命令通配符的使用查看帮助文档二、桌面环境1.Linux 桌面环境介绍相对于现在的 Windows 系统,UNIX/Linux 本身是没有图形界面的,我们通常在 UNIX…

【HDU - 1533】Going Home(网络流,二分图最优匹配,KM算法)

题干: On a grid map there are n little men and n houses. In each unit time, every little man can move one unit step, either horizontally, or vertically, to an adjacent point. For each little man, you need to pay a $1 travel fee for every step h…

【ZOJ - 4029】Now Loading!!!(整除分块,思维,二分,前缀和)

题干: 其中 zi 是第i次询问后的z。 解题报告: 因为有取log运算,所以分母的取值肯定不会超过30种,所以分每一个分母的时候,用前缀和优化一个和,最后求乘积就行了。(其实不需要快速幂&#xff0c…

【ZOJ - 4032】Magic Points (思维,几何,构造)

题干: 解题报告: 想到了,这样绕圈构造。但是这样有个问题,最后一个点如何构造。 刚开始想的是n奇数 , 就8 10 这样的连一条,n偶数 就8 11 这样的连一条,随便构造一下就行,但是发…

android 仿真翻页动画,Android 两Activity之间动画效果(1)---------翻页效果

用Android rotate动画实现翻页效果,效果如图:要实现上面动画,首先搞明白rotate动画原理;(1)Degrees坐标:0度(360度)270度90度 顺时针旋转 180(2)rotate 关键属性fromDegrees 开始旋转时角度 toDegrees 结束时的角…

android 存储不被垃圾清理,手机内存足够大,就不需要清理垃圾了?你错了!

原标题:手机内存足够大,就不需要清理垃圾了?你错了!中新网4月20日电今天,人们使用智能手机的时间已超过电脑,希望在任何时候、任何地方,一部手机搞定所有。对手机的流畅度、性能和安全的要求越来越高。新手机刚到手时非常流畅,用一段时间就出现各种卡顿,网民对猎豹…

android和ios系统的内存,WP和Saipan系统的流畅程度相当于ios,占用的内存很少,但是为什么要用Android取代它...

当涉及到WP和Symbian系统时,许可能没有听说过它,但是对于大多数关注智能手机市场增长的消费者来说,它已经为人们所熟悉,并且许已经使用了它. 当时在功能性机器上使用了Saipan系统,但是您会发现该系统的流畅性与当时的i…

android+微信一键关注,一键关注微信公众平台JS代码有哪些?

一键关注微信公众平台JS代码有哪些?在网页设置一个按钮或者链接可以让用户一键关注微信公众平台,那么这种一键关注微信公众平台的功能如何实现呢?下面小编分享给大家一键关注微信公众平台的JS代码。在微信上,通过微信公众平台推送…

asp.net 写入html代码,asp.net读取模版并写入文本文件

本文要介绍的是ASP.NET怎样读写文本文件,但更重要的是实现的过程。使用的工具是Visual Studio 2015 ,.NET版本是4.6.1 。一共建立的2个项目,HoverTreePanel和HoverTreeWeb,都是ASP.NET项目。文章末尾附源码下载。项目结果如下图&a…

html以图像中心定位,在HTML图像上水平和垂直居中文本(绝对定位)

Michael Roach0htmlcssflexbox鉴于以下设计元素,我试图在html中包含图像,以便可以使用css过渡(悬停效果)操纵不透明度.这里的主要缺点是我使用手动垂直居中(绝对/顶部:4​​0%),这在缩小浏览器时变得明显.在使用绝对定位时,是否可以使用flexbox或table进行垂直居中?…

*【CodeForces - 1150D】Three Religions(dp,预处理,思维)

题干: During the archaeological research in the Middle East you found the traces of three ancient religions: First religion, Second religion and Third religion. You compiled the information on the evolution of each of these beliefs, and you now…

华人科学家量子计算机,华人科学家在美国研发出性能强大的光子计算机,能够与中国的量子计算机一战高下!...

原标题:华人科学家在美国研发出性能强大的光子计算机,能够与中国的量子计算机一战高下!在最近的《自然纳米技术》杂志上,一篇来自美国哥伦比亚大学的论文在业界掀起了轩然大波,一位名叫虞南方的物理学助理教授成功率领…

【BZOJ - 1001】狼抓兔子(无向图网络流,最小割,或平面图转对偶图求最短路SPFA)

题干: 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: …

1.UNIX网络编程卷1:源码配置

本节主要介绍UNIX网络编程卷1(第三版)在Ubuntu16.04的配置问题,并运行一个简单时间获取客户程序。 1.首先下载源文件,链接如下:UNIX Network Programming Source Code 2.将下载好的压缩文件unpv13e.tar.gz解压&#…