這是一套Windows RAC的環境,也是之前處理 解決一則row cache lock引起的效能故障 那套環境。下面記錄一下處理的經過:
1 對這一個小時進行AWR的收集和分析,首先,從報告頭中看到DB Time達到近500分鐘,(DB Time)/Elapsed=8,這個比值偏高:
2 再看TOP 5事件:
看到排在第一位的是enq: TX – row lock contention事件,也就是說系統中在這一個小時裡產生了較為嚴重的行級鎖等待事件。
Top 5 Timed Events
通常,產生enq: TX – row lock contention事件的原因有以下幾種可能:
■不同的session更新或刪除同一條記錄;
■唯一索引有重複索引;
■位元影像索引同時被更新或同時並發的向位元影像索引欄位上插入相同欄位值;
■並發的對同一個資料區塊上的資料進行update操作;
■等待索引塊完成分裂;
同時,從段的統計資訊章節中,也看到下面的資訊:
■% of Capture shows % of row lock waits for each top segment compared
■with total row lock waits for all segments captured by the Snapshot
看到row lock waits發生在一個索引上。
3 那麼,究竟是什麼操作導致了這個enq: TX – row lock contention等待事件呢? 查看系統中,當前有哪些會話產生了enq: TX – row lock contention等待事件?
view sourceprint?
01 SQL> select event,sid,p1,p2,p3 from v$session_wait where event='enq: TX - row lock contention';
02
03 EVENT SID P1 P2 P3
04 ---------------------------------------------------------------- ---------- ---------- ---------- ----------
05 enq: TX - row lock contention 224 1415053316 1441815 144197
06 enq: TX - row lock contention 238 1415053316 1441815 144197
07 enq: TX - row lock contention 247 1415053316 1441815 144197
08 enq: TX - row lock contention 248 1415053316 1441815 144197
09 enq: TX - row lock contention 253 1415053316 1441815 144197
10 SQL>
看到SID為224,238,247,248,253的會話產生enq: TX – row lock contention等待事件。
4 查看系統中的當前會話,是在哪個對象上產生了產生了enq: TX – row lock contention等待事件?
view sourceprint?
01 SQL> select ROW_WAIT_OBJ#,ROW_WAIT_FILE#,ROW_WAIT_BLOCK#,ROW_WAIT_ROW# from v$session where event='enq: TX - row lock contention';
02
03 ROW_WAIT_OBJ# ROW_WAIT_FILE# ROW_WAIT_BLOCK# ROW_WAIT_ROW#
04 ------------- -------------- --------------- -------------
05 369195 0 0 0
06 369195 0 0 0
07 369195 0 0 0
08 369195 0 0 0
09 369195 0 0 0
10 369195 0 0 0
11
12 6 rows selected
13 SQL>
5 那麼這個資料庫物件為369195的對象究竟是什麼呢?
view sourceprint?
01 SQL> select object_name,object_id from dba_objects where object_id=369195;
02
03 OBJECT_NAME OBJECT_ID
04 ----------------------------------- ----------
05 BIND_PROCESS_LOG_REFNO 369195
06 SQL> select OWNER,OBJECT_NAME,OBJECT_ID,DATA_OBJECT_ID, OBJECT_TYPE from dba_objects where object_name='BIND_PROCESS_LOG_REFNO';
更多精彩內容:http://www.bianceng.cn/database/Oracle/