enq: HW - contention事件来啦

业务系统反应数据库慢,根据时间查看awr报告。
在这里插入图片描述

先看一眼事件名称
在这里插入图片描述

HW enqueue 用于序列化超出段高水位线的空间分配。如果同时向对象添加大量数据,则多个进程可能同时尝试在高水位线上方分配空间,从而导致争用。

既然是控制资源并发的enq,那么相关信息还可看
在这里插入图片描述
利用ash的便利性,直接看
在这里插入图片描述
这里有事件和p1 p2 p3
根据p2 了解一下发生热点的表空间

select name from v$tablespace where ts#= &p2 ;

在这里插入图片描述
根据p3 看看所在文件


SELECT DBMS_UTILITY.DATA_BLOCK_ADDRESS_FILE(rdba) RELFILE#,
        DBMS_UTILITY.DATA_BLOCK_ADDRESS_BLOCK(rdba) BLOCK#
   FROM (select &P3 rdba from dual)
 ;

在这里插入图片描述
然后定位到具体对象

select owner, segment_type, segment_name
from dba_extents
where file_id = 5 and 618 between block_id and block_id + blocks - 1
 and tablespace_name = (select name from ts$ where ts#= &p2);

其实ash中早已给出明确信息
在这里插入图片描述
如果当前还在发生,可以找一下阻塞源头

SELECT distinct w.HW, w.p2 OBJECT_ID, l.inst_id, l.sid, l.lmode, l.request
 FROM 
  ( SELECT p2, p3, 'HW-'||substr(p2raw,-8)||'-'||lpad(p3,8,'0') HW
      FROM v$session_wait 
     WHERE event='enq: HW - contention'
       and state='WAITING'
  ) W, 
  gv$lock L
 WHERE l.type(+)='HW'
   and l.id1(+)=w.p2
   and l.id2(+)=w.p3
 ORDER BY hw, lmode desc, request desc
;

或者看当前涉及哪些对象

select DBMS_UTILITY.DATA_BLOCK_ADDRESS_FILE(ID2) FILE#,
DBMS_UTILITY.DATA_BLOCK_ADDRESS_BLOCK(ID2) BLOCK#
from v$lock
where type = 'HW';

频繁扩展空间有可能会导致此事件,可以提前扩展。

alter table t1 allocate extent (size 8G);

如果涉及对象含有blob字段,可以通过一次初始化多个chunk来解决

 Alter system set events '44951 TRACE NAME CONTEXT FOREVER, LEVEL 1024';

这里的level可以是128,512 or 1024。
执行alter system之前一定要检查当前是否设置了其他event

col name for a12
col value for a50
select inst_id, name, value from gv$parameter where name like 'event%';

也可以提前分配

ALTER TABLE <lob_table>
MODIFY LOB (<column_name>) (allocate extent (size <extent size>));
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值