enq: HW - contention 問題的處理
東非奈及利亞某運營商,這是一個06年的系統,伴隨著業務的增長
伺服器負載越來越高,越來越吃力, 客戶提出問題已有半年,
一直沒有完全解決,最近客戶一直在投訴。
現象: 有幾個大表的資料一直錄入不完,發生資料積壓。
awr 報告
Top 5 Timed Foreground Events
Event Waits Time(s) Avg wait (ms) % DB time Wait Class
enq: HW - contention 136 30,920 227353 54.17 Configuration
buffer exterminate 259,455 5,178 20 9.07 Other
buffer busy waits 4,894 4,763 973 8.34 Concurrency
log file sync 220,273 4,345 20 7.61 Commit
free buffer waits 142,053 3,071 22 5.38 Configuration
enq: HW - contention 136 30,920 227353 54.17 Configuration
buffer exterminate 259,455 5,178 20 9.07 Other
buffer busy waits 4,894 4,763 973 8.34 Concurrency
log file sync 220,273 4,345 20 7.61 Commit
free buffer waits 142,053 3,071 22 5.38 Configuration
主要enq: HW - contention等待事件膠及buffer busy 等執點爭用的事件
熱點爭用的物件
主要是系統裡的大表及審計表,這裡我們也用不到審計,直接關掉
Segments by Buffer Busy Waits
% of Capture shows % of Buffer Busy Waits for each top segment compared
with total Buffer Busy Waits for all segments captured by the Snapshot
with total Buffer Busy Waits for all segments captured by the Snapshot
Owner Tablespace Name Object Name Subobject Name Obj. Type Buffer Busy Waits % of Capture
REPORT_PMDB REPORT_DB C_CELL_PS TABLE 50 53.19
REPORT_PMDB REPORT_PMDB_INDEX C_CELL_LINK_INDEX_9 INDEX 19 20.21
REPORT_PMDB REPORT_DB C_CELL_CS TABLE 14 14.89
SYS SYSTEM AUD$ TABLE 11 11.70
REPORT_PMDB REPORT_DB C_CELL_PS TABLE 50 53.19
REPORT_PMDB REPORT_PMDB_INDEX C_CELL_LINK_INDEX_9 INDEX 19 20.21
REPORT_PMDB REPORT_DB C_CELL_CS TABLE 14 14.89
SYS SYSTEM AUD$ TABLE 11 11.70
為防止多個程式同時修改HWM而提供的鎖稱為HW鎖。想要移動HWM的程式必須獲得HW鎖。
若在獲取HW鎖過程中發生爭用,則等待enq: HW - contention事件。
HW鎖爭用大部分是大量執行insert所引發的。
眾所周知,Oracle高水位線標誌著該線以下的block均被Oracle格式過,
通俗一點講就是該高水位線以下的block都被Oracle使用過。
通常在執行insert操作時,當高水位線以下block不夠用時,
Oracle將會推進高水位線。更進一步講,
當有多個程式在同時進行insert操作時,比較容易引起高水位線爭用,
主要表現為enq: HW - contention
若在獲取HW鎖過程中發生爭用,則等待enq: HW - contention事件。
HW鎖爭用大部分是大量執行insert所引發的。
眾所周知,Oracle高水位線標誌著該線以下的block均被Oracle格式過,
通俗一點講就是該高水位線以下的block都被Oracle使用過。
通常在執行insert操作時,當高水位線以下block不夠用時,
Oracle將會推進高水位線。更進一步講,
當有多個程式在同時進行insert操作時,比較容易引起高水位線爭用,
主要表現為enq: HW - contention
SQL> select event#,name,parameter1,parameter2,parameter3 from v$event_name where name = 'enq: HW - contention';
EVENT# NAME PARAMETER1 PARAMETER2 PARAMETER3
EVENT# NAME PARAMETER1 PARAMETER2 PARAMETER3
enq: HW - contention name|mode table space #
block 如何找到事件:'enq: HW - contention' 熱點物件:
block 如何找到事件:'enq: HW - contention' 熱點物件:
檢視v$session_wait,應該會有如下等待事件:
SQL> select p1, p2, p3 from v$session_wait where event = 'enq: HW - contention';
P1 P2 P3
---------- ---------- ---------- 5.1213661190 7 140003563
1213661190 7 140003563
1213661190 7 140003563
1213661190 7 140003563
1213661190 7 140003563
1213661190 7 140003563
1213661190 7 140003563
7 rows selected 7 rows selected透過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)
------------------------------------------------ ----------------------------------------------- 5. 1591531 33
而透過file#和block#定位物件:
.SQL> select owner, segment_type, segment_name
from dba_extents 3. 3 where file_id = 33
and 1591531 between block_id and block_id + blocks - 1;
P1 P2 P3
---------- ---------- ---------- 5.1213661190 7 140003563
1213661190 7 140003563
1213661190 7 140003563
1213661190 7 140003563
1213661190 7 140003563
1213661190 7 140003563
1213661190 7 140003563
7 rows selected 7 rows selected透過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)
------------------------------------------------ ----------------------------------------------- 5. 1591531 33
而透過file#和block#定位物件:
.SQL> select owner, segment_type, segment_name
from dba_extents 3. 3 where file_id = 33
and 1591531 between block_id and block_id + blocks - 1;
定位:幾個大表資料量較大,引起高水位擴充套件等待及熱點爭用。
措施1. 修改幾張大表為hash 分割槽表
2. 關掉審計
插曲:
2. 關掉審計
插曲:
負責運維的兄弟比較保守,一開始在每個表上劃分三個hash 分割槽
但是效果不太明顯。(備註一般來說建2的次方個分割槽)
於是又增加了13個分割槽達到16個分割槽,是4的n次方。但是反而更慢了。
開始懷疑方案,一再分的原來增加了分割槽後,全部的index 失效。
重建index ,速度提高了不少。
到此問題結束。.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29440247/viewspace-1648728/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- enq: HW - contentionENQ
- 等待事件之enq: HW - contention事件ENQ
- 大量insert引起的enq: HW - contention等待ENQ
- 如何診斷等待事件 enq: HW - contention事件ENQ
- 關於HW-contention等待的處理
- enq: HW - contention診斷及解決過程ENQ
- enq: SQ - contention 等待事件處理辦法ENQ事件
- enq: TX - row lock contention等待事件處理ENQ事件
- ORACLE 如何診斷高水位爭用(enq: HW – contention)OracleENQ
- 'enq HW - contention' For Busy LOB Segment (文件 ID 740075.1)ENQ
- Enq : HW-contention高水位線的擴充套件競爭ENQ套件
- [20161208]等待事件enq: HW - contention事件ENQ
- [20140311]等待事件enq HW - contention事件ENQ
- How To Analyze the Wait Statistic: 'enq: HW - contention' (文件 ID 419348.1)AIENQ
- 故障處理】佇列等待之enq: US - contention案例佇列ENQ
- 【故障處理】佇列等待之enq: US - contention案例佇列ENQ
- 【故障處理】佇列等待之enq IV - contention案例佇列ENQ
- awr報告中顯示enq: TM - contention 處理方法ENQ
- 效能問題,AWR High Event enq: US - contentionENQ
- enq: US - contention問題 undo 使用率100%ENQ
- enq: TX - index contention基礎理論ENQIndex
- enq: US - contentionENQ
- enq: TM - contentionENQ
- enq:TM contentionENQ
- enq: DX - contentionENQ
- enq: TS - contentionENQ
- [zt] 處理LOB(大物件)表enqueue HW問題的一個方法物件ENQ
- zt_Oracle enq: TX contention 和 enq: TM contention 等待事件OracleENQ事件
- enq:TX - index contentionENQIndex
- enq: TX - index contentionENQIndex
- 關於12C RAC 上的top5 問題:enq: IV - contentionENQ
- enq: TX - row lock contentionENQ
- 關於enq: US – contentionENQ
- enq: WF - contention等待事件ENQ事件
- enq: CF - contention 等待事件ENQ事件
- enq: TX - index contention等待ENQIndex
- enq: TS - contention 等待事件ENQ事件
- 【恩墨學院】經典故障分析 - ASSM引發的索引爭用與 enq HW -contention 等待事件SSM索引ENQ事件