Enq : HW-contention等待事件,是由于大量征用segment的高水位线引起的队列竞争。
SQL> select user_id,sql_id,p1,p2,p3,current_obj#,current_block# from
v$active_session_history where event='enq: HW - contention' and rownum<2;
USER_ID SQL_ID
P1 P2 P3 CURRENT_OBJ# CURRENT_BLOCK#
------- ------------- ------- --- --- ------------ ------------
--------------
56 4btv9g407b2x2 1213661190 1 8397177
51555 196029
SQL> col parameter1 for a20
SQL> col parameter3 for a20
SQL> col parameter2 for a20
SQL> select parameter1,parameter2,parameter3 from v$event_name where
name='enq: HW - contention'
2 ;
PARAMETER1
PARAMETER2 PARAMETER3
-------------------- -------------------- --------------------
name|mode table space
# block
可以利用p3来找到file_Id和segment来找到产生hw竞争的对象,进而采取相应的办法来处理。
SQL> select dbms_utility.data_block_address_file(8397177)
file_id,dbms_utility.data_block_address_block(8397177) block_id from dual;
FILE_ID BLOCK_ID
---------- ----------
28569
进而利用dba_extents来找到相应的segment来诊断问题
select/*+rule*/*fromdba_extentswhererelative_fno=2andfile_id=2and8569betweenblock_idandblock_id+blocks
一般系统出现大量session并发insert导致对象的hwm竞争,可以采取增加大的extent或者做hash分区来解决热点快,hw竞争,看来和上次的碰见一个index contention分裂差不多,会话中出现大量的索引分裂引起的队列等待,采取hash global index顺利解决了。
热点对象分区依然是解决问题的实用方法![@more@]
这篇博客探讨了数据库中出现的Enq:HW-contention等待事件,该事件通常由大量并发插入操作引起,导致对象的高水位线竞争。通过查询V$ACTIVE_SESSION_HISTORY和V$EVENT_NAME视图,可以定位到问题的源头。利用DBMS_UTILITY包的函数确定文件ID和块ID,进一步通过DBA_EXTENTS找出引发竞争的段。解决策略包括增加大块EXTENT或使用哈希分区来分散热点。作者还提到了索引竞争分裂的问题,并通过创建全局哈希索引来解决。热点对象的分区是处理此类问题的有效方法。
3231

被折叠的 条评论
为什么被折叠?



