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@]