APPEND時的TM鎖定級別

westzq1984發表於2009-09-22

朋友問他們INSERT由於TM鎖阻塞了其他會話的UPDATE語句

聽到的第一個反應的外來鍵列沒有索引,當是他說沒外來鍵索引的這個問題

根據他給我東西看:
SID                                   ID1        ID2      LMODE    REQUEST TY
------------------------------ ---------- ---------- ---------- ---------- --
HOLDER:1510                         66571          0          6          0 TM
WAITER:104                          66571          0          0          3 TM
WAITER:118                          66571          0          0          3 TM
WAITER:353                          66571          0          0          3 TM
WAITER:546                          66571          0          0          3 TM

TM6阻塞了TM3,TM6是獨佔鎖,應該是在DDL語句時候才會有的,又讓他給我看捕獲的語句

INSERT /*+ APPEND */ INTO ACPDR ( SELECT A.*, DECODE( B.DOCID, N
UPDATE acpdr SET CHKFLG=1,LSERIAL_NO='bp_tmpdata_1_tb;328506139'
UPDATE acpdr SET CHKFLG=1,LSERIAL_NO='bp_tmpdata_1_tb;328519175'

一看到這個APPEND我就覺得不對,估計是這個提示的原因,讓他查了下,ID1 66571是表acpdr的P10分割槽

自己測試了下:
SQL> INSERT INTO test SELECT * FROM dba_objects;
 
6940 rows inserted
 
SQL> SELECT * FROM v$lock WHERE sid=(SELECT sid FROM v$mystat WHERE ROWNUM=1);
 
ADDR     KADDR           SID TYPE        ID1        ID2      LMODE    REQUEST      CTIME      BLOCK
-------- -------- ---------- ---- ---------- ---------- ---------- ---------- ---------- ----------
52F7F8E8 52F7F9F4         16 TX      1048608         37          6          0         30          0
52F4D1D4 52F4D1E8         16 TM         7608          0          3          0         30          0
 
SQL> INSERT /*+append*/ INTO test SELECT * FROM dba_objects;
 
6940 rows inserted
 
SQL> SELECT * FROM v$lock WHERE sid=(SELECT sid FROM v$mystat WHERE ROWNUM=1);
 
ADDR     KADDR           SID TYPE        ID1        ID2      LMODE    REQUEST      CTIME      BLOCK
-------- -------- ---------- ---- ---------- ---------- ---------- ---------- ---------- ----------
52F7F8E8 52F7F9F4         16 TX      1048608         37          6          0         51          0
52F4D1D4 52F4D1E8         16 TM         7608          0          6          0          6          0

可以看到,APPEND確實是用TM6來鎖表的。估計用TM6的原因是,APPEND是在高水位線上直接插入,為了回滾的需求而需要的(在回滾時,直接從點陣圖中刪除分配的盤區資訊)

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8242091/viewspace-615357/,如需轉載,請註明出處,否則將追究法律責任。

相關文章