等待事件enq:HW–contention说明及解决方法

一、今天在查看awr报告中,发现Top 5 Timed Foreground Events发现enq: HW - contention的等待事件;

 

二、enq: HW - contention的官方说明:

The HW enqueue is used to serialize the allocation of space beyond the high water mark of a segment.

?V$SESSION_WAIT.P2 / V$LOCK.ID1 is the tablespace number.

?V$SESSION_WAIT.P3 / V$LOCK.ID2 is the relative data block address (dba) of segment header of the object for which space is being allocated.

If this is a point of contention for an object, then manual allocation of extents solves the problem.

 

三、等待事件解释

为防止多个进程同时修改HWM而提供的锁称为HW锁。想要移动HWM的进程必须获得HW锁。若在获取HW锁过程中发生争用,则等待enq: HW - contention事件。HW锁争用大部分是因大量执行insert所引发的,偶尔也会因大量执行update在回滚段中发生HW锁争用现象。若是update,表中段的扩展的大小虽然不多,但在创建回滚数据的过程中,需要回滚段的急速扩张。HW锁争用是在急速空间扩张时普遍出现的等待现象,有时也会引发严重的性能下降。

 

SQL> select event#,name,parameter1,parameter2,parameter3 from v$event_name where name = 'enq: HW - contention';

EVENT# NAME PARAMETER1 PARAMETER2 PARAMETER3

---------- ---------------------------------------- -------------------- -------------------- --------------------

250 enq: HW - contention name|mode table space # block

众所周知,Oracle高水位线标志着该线以下的block均被Oracle格式过,通俗一点讲就是该高水位线以下的block都被Oracle使用过。 通常在执行insert操作时,当高水位线以下block不够用时,Oracle将会推进高水位线。更进一步讲,当有多个进程在同时进行insert操作时,比较容易引起高水位线争用,主要表现为enq: HW - contention。

 

四、如何找到事件:'enq: HW - contention' 热点对象:

1、查看v$session_wait,应该会有如下等待事件:

SQL> select p1, p2, p3 from v$session_wait where event = 'enq: HW - contention';

P1 P2 P3

---------- ---------- ----------

1213661190 7 140003563

1213661190 7 140003563

1213661190 7 140003563

1213661190 7 140003563

1213661190 7 140003563

1213661190 7 140003563

1213661190 7 140003563

 

2、通过P3进行DBMS_UTILITY转换可以获知发生争用的文件和block:

SQL> select dbms_utility.data_block_address_block(140003563),dbms_utility.data_block_address_file(140003563) from dual;

DBMS_UTILITY.DATA_BLOCK_ADDRESS_BLOCK(140003563) DBMS_UTILITY.DATA_BLOCK_ADDRESS_FILE(140003563)

------------------------------------------------ -----------------------------------------------

1591531 33

 

3、进而通过file#和block#定位对象:

SQL> select owner, segment_type, segment_name

from dba_extents

where file_id = 33 and 1591531 between block_id and block_id + blocks - 1;

 

五、减少HW锁争用的方法如下:

If this is a point of contention for an object, then manual allocation of extents solves the problem.

脚本:alter table <TABNAME> allocate extent,提前分配空间;

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

本文作者:JOHN

ORACLE技术博客:ORACLE 猎人笔记               数据库技术群:367875324 (请备注ORACLE管理 )  

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

时间: 2024-10-24 17:04:51

等待事件enq:HW–contention说明及解决方法的相关文章

[20140311]等待事件enq HW - contention

[20140311]等待事件enq HW - contention.txt 生产系统业务高峰时出现enq: HW - contention,一般这个主要是插入记录非常密集的情况下出现,自己对系统分析看看主要是那些对象 引起的问题. SQL> @ver BANNER ---------------------------------------------------------------- Oracle Database 10g Enterprise Edition Release 10.2.

[20161208]等待事件enq: HW - contention

[20161208]等待事件enq HW - contention.txt --别人的系统遭遇enq: HW - contention,自己诊断遇到一点点小误区,实际上我看看我原来的帖子就知道问题在那里了 --链接:http://blog.itpub.net/267265/viewspace-1107524/ SELECT event_id       ,name       ,parameter1       ,parameter2       ,parameter3   FROM v$eve

经典故障分析 - ASSM引发的索引争用与 enq HW -contention 等待事件

作者介绍: 孙加鹏 云和恩墨技术顾问 六年Oracle技术顾问经验,所服务的行业包括电信运营商.金融业.制造业等. 擅长Oracle的故障诊断.高可用架构.升级迁移等.目前主要服务于上海金融类客户. 故障概述 2017年07月24日11:58左右,客户核心数据库出现大量活动会话,导致数据库负载急剧加大,从而导致业务出现延时,DBA通过查看SESSION信息发现有大量的"enq: HW - contention"等待事件. 一直持续约有3分钟,数据库负载下降: 下面是详细的故障分析诊断过

等待事件之enq: HW - contention

等待事件之enq: HW - contention SELECT *   FROM V$EVENT_NAME  WHERE NAME  IN        ('enq: HW - contention'); SELECT * FROM V$LOCK_TYPE D WHERE D.TYPE='HW'; 主要用来控制特定对象空间分配时的并发操作.v$lock中的id1为表空间编号ts#,id2为需要分配空间的对象segment header的相对DBA(Data Block Address)位置.

【故障处理】队列等待之enq: US - contention案例

[故障处理]队列等待之enq: US - contention案例 1  BLOG文档结构图       2  前言部分 2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① enq: US - contention等待事件的解决 ② 一般等待事件的解决办法 ③ 队列等待的基本知识   Tips: ① 本文在ITpub(http://blog.itpub.net/26736162).博客园(http://www.

【故障处理】队列等待之enq IV - contention案例

[故障处理]队列等待之enq IV -  contention案例 1.1  BLOG文档结构图   1.2  前言部分 1.2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① 队列等待之enq IV -  contention案例(重点) Tips: ① 本文在itpub(http://blog.itpub.net/26736162).博客园(http://www.cnblogs.com/lhrbest)和微

A标签触发onclick事件而不跳转的多种解决方法

在web页面开发时,我们经常会遇到下列情况: 1.一个标签仅仅是要触发onclick行为: 2.表现上要有鼠标的pointer指针显示,或者其他类似a标签的视觉效果. 比如执行删除操作时,为了避免误操作,我们要弹出对话框让用户确定是否删除.因此我们经常会用链接<a></a>形式代替<button> 触发onclick事件. 代码如下: 复制代码 代码如下: <script type="text/javascript"> function

win7系统事件日志服务4201错误的解决方法

EventLog Analyzer能分析所有Windows和UNIX系统日志.如果在网络中的某台机器上生成一个重要的安全事件,就会显示在EventLog Analyzer仪表盘上的即时报表中.当用户在Win7系统中进行了某些系统优化或设置了用户权限之后,导致"事件查看器"无法启动,而对相应的Event Log服务进行手动设置启动的时,出现了4201错误.现小编给大家详解Win7旗舰版系统下Event Log服务出现4201错误的解决方法! 操作步骤: 1.打开win7系统资源管理器,找

A标签触发onclick事件而不跳转的多种解决方法_javascript技巧

在web页面开发时,我们经常会遇到下列情况: 1.一个标签仅仅是要触发onclick行为: 2.表现上要有鼠标的pointer指针显示,或者其他类似a标签的视觉效果. 比如执行删除操作时,为了避免误操作,我们要弹出对话框让用户确定是否删除.因此我们经常会用链接<a></a>形式代替<button> 触发onclick事件. 代码如下: 复制代码 代码如下: <script type="text/javascript"> function