APPEND時的TM鎖定級別
朋友問他們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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle的TM鎖、TX鎖Oracle
- oracle的TM鎖、TX鎖知識完全普及Oracle
- 對TM鎖和TX鎖的簡單理解
- [Oracle] Append hint(insert sql) will lead a TM LOCKOracleAPPSQL
- TM表鎖各種mode的實驗及2-6 的TM鎖相互間的互斥示例
- 並行dml操作所需的TM鎖並行
- Java synchronized物件級別與類級別的同步鎖Javasynchronized物件
- 確定enqueue鎖型別ENQ型別
- append與 appendTo的區別APP
- 臨時表的APPEND方式插入APP
- 列表中的append,extend,+=,+的區別APP
- append()與html() 區別APPHTML
- Fescar鎖和隔離級別的理解
- 2.6.7 設定DDL鎖超時
- 【statspack級別設定】
- java 中的鎖 -- 偏向鎖、輕量級鎖、自旋鎖、重量級鎖Java
- oracle鎖級別相關測試Oracle
- MongoDB資料庫級別的鎖粒度介紹MongoDB資料庫
- RR與RC隔離級別下MySQL不同的加鎖解鎖方式MySql
- insert /*+ append */ into 與insert into 的區別APP
- mysql事務隔離級別和鎖MySql
- Mysql鎖與事務隔離級別MySql
- Mysql鎖之行級鎖和表級意向鎖MySql
- Oracle的TX鎖(行級鎖、事務鎖)Oracle
- 【Script】查詢鎖狀態的同時展示出鎖型別資訊型別
- jquery中append()方法與after()方法的區別jQueryAPP
- append()函式與html()函式的區別APP函式HTML
- win10鎖屏時間太短怎麼辦 設定鎖屏以及睡眠時間的方法Win10
- 設定Spark日誌級別Spark
- MySQL設定隔離級別MySql
- 淺談偏向鎖、輕量級鎖、重量級鎖
- Windows10系統下鎖定螢幕超時的設定方法Windows
- enq: TM - contention TM 等待事件的原因及模擬ENQ事件
- 深入理解偏向鎖、輕量級鎖、重量級鎖
- synchronized鎖的升級synchronized
- 檢視長時間鎖定物件的程式,並kill掉物件
- Mysql事務隔離級別與鎖機制MySql
- SQL鎖機制和事務隔離級別SQL