查看: 21850|回復: 15

[筆記] Oracle中的鎖和10704對高級隊列鎖的跟蹤實驗

[復制鏈接]
認證徽章
論壇徽章:
0
跳轉到指定樓層
1#
發表于 2017-7-11 17:22 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 cdddata 于 2017-7-12 23:00 編輯

鎖是數據庫用來控制共享資源并發訪問的機制,是用來保護和用戶相關的資源,如:表、用戶、會話等。
本文以Oracle中鎖的種類和模式講起,后用10704做實驗觀察不同sql語句下鎖持有情況的不同,主要以TM鎖為例。
小弟初學Oracle,如果錯誤還望多多包涵和留言指出

一、Oracle鎖的
種類

Oracle里鎖分為三大類:
高級隊列鎖:TM,TX鎖等等  視圖V$LOCK
中級內存鎖:Library cache lock
                   Library cache pin(堆)
                   Row cache lock;
                   Buffer pin lock;
低級內存鎖:Latch
                   Mutex
高級隊列鎖Lock與低級內存鎖的區別:
1.Lock的種類多,如TM,TX,TT等等;
2.Lock作用于數據庫Object,Lacth只作用于SGA內存中;
3.Lock的釋放需要等到事務結束,Latch是瞬間的占用和釋放;
4.Lock存在死鎖,Latch不存在死鎖(因free lock機制)

低級內存鎖與中級內存鎖的區別,主要在于低級內存鎖有lock free機制(無鎖式編程):即請求latch時,如果該latch不可用,進程會在CPU中等待小段時間(spin)然后重新請求latch。如果依然不可用,該進程會重復以上步驟去請求latch。重復的次數默認值為2000(mutex為500)。如果在重復次數內還是請求不到latch,進程會在v$session_wait中記錄latch free等待事件,然后釋放cpu,轉入睡眠狀態。當睡眠一定時間后,進程被喚醒并重復上面的過程,一直到成功獲取latch。因此低級內存鎖避免了死鎖的存在。此外,中級內存鎖往往執行多條記錄才會釋放,而低級內存鎖執行幾條就可能會釋放。

二、Oracle鎖的模式

鎖模式可粗略的分為空鎖,共享和獨占:
空  鎖:1號鎖,空鎖,通常只起標志性作用,保證內存不會被釋放。
共享鎖:2-5號鎖,包括RS(行共享)、RX(行專用)、S(共享鎖)、SRX(共享行專用),允許部分DML操作,數字越大影響的操作越大。
獨占鎖:6號鎖,exclusive獨立訪問使用,是限制最高級別的鎖,禁止所有DML操作。

說明:Oracle中多數鎖都是有著多種模式的,除高級隊列鎖TM外,中級內存鎖Library Cache Lock/pin、buffer pin也是有多種模式的。

本文主要以跟蹤高級隊列鎖為主:
TM鎖定的是對象,所以叫對象鎖,或者表鎖,用來阻塞DML(或DDL)的運行,通常是持有2-6號鎖,1號較少。
TX即事務獨占鎖,是所有加在行上的鎖的總稱。模式只有兩種,要么無鎖,要么獨占鎖(6號);

三、跟蹤高級隊列鎖Lock示例
10704事件可以幫助我們跟蹤鎖和隊列的使用情況,下面先以update為例,用10704事件來觀察鎖的狀態:
sqlplus cheng/oracle
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE        11.2.0.4.0        Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production
SQL> select * from test_t1;
ID NAME
---------- --------------------
1 aaaaaa
2 aaaaaa
3 aaaaaa
4 aaaaaa
5 aaaaaa
6 aaaaaa
7 aaaaaa
8 aaaaaa
9 aaaaaa
10 aaaaaa

10 rows selected.

SQL> alter session set events '10704 trace name context forever, level 12'; --開啟10704跟蹤
Session altered.
SQL> update test_t1 set NAME='bbbbbb' where id<5;  --更新幾條數據
4 rows updated.
SQL> commit;  --提交數據
Commit complete.
SQL> alter session set events '10704 trace name context off'; --關閉10704跟蹤
Session altered.

[[email protected] ~]$ cd $ORACLE_BASE/diag/rdbms/orcl/orcl/trace/
[[email protected] trace]$ more orcl_ora_4992.trc  --提取日志分析

*** 2017-07-05 15:58:46.636
ksqgtl *** CU-bd59a970-00000000 mode=6 flags=0x10000 timeout=300 *** --申請持有游標鎖
ksqgtl: no transaction
ksqgtl: use existing ksusetxn DID
ksqgtl:
ksqlkdid: 0001-0015-00000017

*** 2017-07-05 15:58:46.636
*** ksudidTrace: ksqgtl
ksusesdi:   0000-0000-00000000
ksusetxn:   0001-0015-00000017
ksqgtl: RETURNS 0     --獲得游標鎖

*** 2017-07-05 15:58:46.639
ksqrcl: CU,bd59a970,0
ksqrcl: returns 0     --釋放游標鎖

*** 2017-07-05 15:58:46.639
ksqgtl *** TM-00015b7d-00000000 mode=3 flags=0x401 timeout=21474836 ***  --申請持有TM鎖(3號)
ksqgtl: xcb=0xbbeb52b8, ktcdix=2147483647, topxcb=0xbbeb52b8
ktcipt(topxcb)=0x0

*** 2017-07-05 15:58:46.639
ksucti: init txn DID from session DID
ksqgtl:
ksqlkdid: 0001-0015-00000017

*** 2017-07-05 15:58:46.639
*** ksudidTrace: ksqgtl
ktcmydid(): 0001-0015-00000017
ksusesdi:   0000-0000-00000000
ksusetxn:   0001-0015-00000017
ksqgtl: RETURNS 0   --獲得TM鎖

*** 2017-07-05 15:58:46.639
ksqgtl *** TX-00090011-0000058b mode=6 flags=0x401 timeout=0 ***  --申請持有TX鎖(6號獨占)
ksqgtl: xcb=0xbbeb52b8, ktcdix=2147483647, topxcb=0xbbeb52b8
ktcipt(topxcb)=0x0

*** 2017-07-05 15:58:46.639
ksucti: init session DID from txn DID:
ksqgtl:
ksqlkdid: 0001-0015-00000017

*** 2017-07-05 15:58:46.639
*** ksudidTrace: ksqgtl
ktcmydid(): 0001-0015-00000017
ksusesdi:   0000-0000-00000000
ksusetxn:   0001-0015-00000017
ksqgtl: RETURNS 0  --獲得TX鎖

--此時COMMIT提交

*** 2017-07-05 15:58:57.519
ksqrcl: TX,90011,58b
ksqrcl: returns 0 --釋放TX鎖


*** 2017-07-05 15:58:57.519
ksqrcl: TM,15b7d,0
ksqrcl: returns 0 --釋放TM鎖

以上即是update test_t1 set NAME='bbbbbb' where id<5語句的鎖的狀態過程

分析:
TM-00015b7d-00000000 mode=3
TM鎖ID1對應的是Object_ID,00015b7d(十六進制)>88957(十進制)
SQL> select object_id,object_name from dba_objects where object_id=88957;
OBJECT_ID OBJECT_NAME
---------- --------------------------------------------------------------------------------------------------------------------------------
     88957 TEST_T1
可知在update執行過程中,TEST_T1持有的是3號鎖,不會堵塞DML操作。

TX-00090011-0000058b mode=6
即對應update test_t1 set NAME='bbbbbb' where id<5語句,可見Update四行,只產生一個TX鎖。
認證徽章
論壇徽章:
0
2#
發表于 2017-7-11 17:23 | 只看該作者
本帖最后由 cdddata 于 2017-7-12 22:56 編輯

通過10704觀察oracle高級隊列鎖的持有釋放過程以及鎖模式,從而知道操作DML或DDL語句過程中Oracle究竟鎖定了哪些表,以及對表操作的影響,分析出執行語句可能產生的性能問題,從而去避免。
高級隊列鎖比較經典的問題就是創建索引的online和offiline持有什么模式,下面的實驗用10704來跟蹤各種語句持有的鎖信息,以觀察TM和TX鎖為主


四、Offline和Online創建索引的鎖的跟蹤對比
這次實驗觀察不同sql語句下鎖持有情況的不同,主要以TM鎖為例
實驗準備:

sqlplus / as sysdba
SQL> create table text as select * from dba_objects;
SQL> insert into text select * from text;
.....
SQL> select count(*) from text;
  COUNT(*)
----------
  22267136
SQL> create table text_t1 as select * from text;
SQL> select OBJECT_ID,OBJECT_NAME from dba_objects where OBJECT_NAME='TEXT_T1';
OBJECT_ID OBJECT_NAME
---------- ------------------------------------------------------------------------------------------------
     89012 TEXT_T1

1.Create index
Session 1
conn cyh/oracle
SQL> select sid from v$mystat where rownum=1    確認當前會話號SID
----------
  45
SQL> alter session set events '10704 trace name context forever, level 12';   啟動10704觀察
SQL> create index idx_text01 on text_t1(OBJECT_ID);

Session 2
sqlplus / as sysdba
在索引創建的同時,新開個窗口觀察45會話持有鎖的動態
SQL> select * from v$lock where sid=45;
ADDR KADDR SID TY        ID1  ID2   LMODE    REQUEST CTIME    BLOCK
---------------- ---------------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------
00000000BED5CE58 00000000BED5CEB0  45 AE        100    0       4  0   132 0
00000000BED5D1D8 00000000BED5D230  45 DL      89012    0       3  0    47 0
00000000BED5D478 00000000BED5D4D0  45 DL      89012    0       3  0    47 0
00007F2A281DC028 00007F2A281DC088  45 TM      89012    0       4  0    47 0
00007F2A281DC028 00007F2A281DC088  45 TM 18    0       3  0    47 0
00000000BBE04B08 00000000BBE04BB8  45 TS 14   29360258       6  0    21 0
00000000BBF03CC8 00000000BBF03D40  45 TX     262165 1930       6  0    47 0

Session 1
SQL> create index idx_text01 on text_t1(OBJECT_ID);
Index created.
SQL> alter session set events '10704 trace name context off';

Linux
[[email protected] trace]$ more orcl_ora_24114.trc   從OS從提取日志分析

TM-00015bb4-00000000 mode=4  指向TEXT_T1 開頭持有結束釋放 4號鎖,阻塞其他事務DML操作

TM-00000012-00000000 mode=3  指向OBJ$    多次持有多次釋放
TM-0000000e-00000000 mode=3  指向SEG$    多次持有多次釋放
TM-00000014-00000000 mode=3  指向ICOL$  僅在末尾持有和釋放一次
TM-00000013-00000000 mode=3  指向IND$   僅在末尾持有和釋放一次

Create index時,持有4號TM鎖在TEXT_T1表,在此期間堵塞其他事務DML操作;另以TM鎖3號模式鎖定OBJ$,SEG$,ICOL$,IND$數據字典表,對其進行DML(Insert)操作,以更新維護數據字典表信息。


TX鎖的記錄以及加到哪個對象上(按時間先后):
OBJ$:
TX-00040015-0000078a mode=6  
TX-00040004-0000078a mode=6
SEG$:
TX-0004001d-00000789 mode=6
TX-00040011-00000789 mode=6
TX-00040001-0000078a mode=6
TX-00040010-0000078b mode=6
TX-00040000-0000078b mode=6
TX-00040012-0000078b mode=6
TX-00040020-0000078a mode=6
TX-00040003-0000078b mode=6
TX-0004001c-0000078b mode=6
TX-0004000a-0000078d mode=6
TX-0004001f-0000078b mode=6
TX-00040019-0000078d mode=6
TX-0004000e-0000078d mode=6
TX-0004001f-0000078d mode=6
TX-00040005-0000078e mode=6
TX-0004000b-00000788 mode=6
TX-00040014-0000078d mode=6
TX-00040021-00000788 mode=6
TX-00040002-00000781 mode=6
TX-0004001a-00000777 mode=6
TX-00040013-0000078d mode=6
TX-00040009-0000078d mode=6
TX-0004001b-0000078d mode=6
TX-00040006-0000078b mode=6
TX-0004000d-0000078e mode=6
TX-00040017-0000078e mode=6
TX-0004000f-0000078e mode=6
TX-00040008-00000789 mode=6
TX-00040018-0000078d mode=6
TX-00040007-0000078d mode=6
TX-0004000c-0000078e mode=6
TX-0004001e-0000078c mode=6
TX-00040016-0000078e mode=6
TX-00040004-0000078d mode=6
TX-0004001d-0000078c mode=6
TX-00040011-0000078c mode=6
TX-00040001-0000078d mode=6
TX-00040010-0000078e mode=6
TX-00040000-0000078e mode=6
TX-00040012-0000078e mode=6
TX-00040020-0000078d mode=6
TX-00040003-0000078e mode=6
TX-0004001c-0000078e mode=6
TX-0004000a-0000078e mode=6
TX-00040019-0000078e mode=6
TX-0004000e-0000078e mode=6
TX-0004001f-0000078e mode=6
TX-00040005-0000078f mode=6
TX-0004000b-00000789 mode=6
TX-00040014-0000078e mode=6
TX-00040021-00000789 mode=6
TX-00040002-00000782 mode=6
TX-0004001a-00000778 mode=6
TX-00040013-0000078e mode=6
TX-00040009-0000078e mode=6
TX-0004001b-0000078e mode=6
TX-00040006-0000078c mode=6
TX-0004000d-0000078f mode=6
TX-00040017-0000078f mode=6
TX-0004000f-0000078f mode=6
TX-00040008-0000078a mode=6
TX-00040018-0000078e mode=6
TX-00040007-0000078e mode=6
TX-0004000c-0000078f mode=6
TX-0004001e-0000078d mode=6
TX-00040016-0000078f mode=6
TX-00040004-0000078e mode=6
TX-0004001d-0000078d mode=6
TX-00040011-0000078d mode=6
TX-00040001-0000078e mode=6
TX-00040010-0000078f mode=6
TX-00040000-0000078f mode=6
TX-00040012-0000078f mode=6
TX-00040020-0000078e mode=6
TX-00040003-0000078f mode=6
TX-0004001c-0000078f mode=6
TX-0004000a-0000078f mode=6
TX-00040019-0000078f mode=6
TX-0004000e-0000078f mode=6
TX-0004001f-0000078f mode=6
TX-00040005-00000790 mode=6
TX-0004000b-0000078a mode=6
TX-00040014-0000078f mode=6
TX-00040021-0000078a mode=6
TX-00040002-00000783 mode=6
TX-0004001a-00000779 mode=6
TX-00040013-0000078f mode=6
TX-00040009-0000078f mode=6
TX-0004001b-0000078f mode=6
TX-00040006-0000078d mode=6
TX-0004000d-00000790 mode=6
TX-00040017-00000790 mode=6
TX-0004000f-00000790 mode=6
TX-00040008-0000078b mode=6
TX-00040018-0000078f mode=6
TX-00040007-0000078f mode=6
TX-0004000c-00000790 mode=6
TX-0004001e-0000078e mode=6
TX-00040016-00000790 mode=6
TX-00040004-0000078f mode=6
TX-00040004-0000078f mode=6
TX-00040011-0000078e mode=6
TX-00040001-0000078f mode=6
TX-00040010-00000790 mode=6
注意:Oracle存在自治事務,自制事務是由主事務調用但是獨立于主事務的事務。在自治事務被調用執行時,主事務被掛起,在自治事務內部,一系列的DML可以被執行并且commit或rollback. 自治事務防止嵌套提交,使事務在自己的事務區內提交或回滾不會影響其他的事務。由于自治事務的獨立性,它的commit和rollback并不影響主事務的執行效果。在自治事務執行結束后,主事務獲得控制權,又可以繼續執行了。

其他鎖(系統鎖)的記錄:
CU-XXXXXXX-00000000 mode=6    Cursor bind 游標綁定鎖 多個
DL-00015bb4-00000000 mode=3   指向TEST_T1  Direct loader parallel index create
TT-00000003-00000010 mode=4   指向I_OBJ#   臨時表隊列鎖Temporary table enqueue
TS-0000000e-01c00082 mode=6   指向SEG$     New block allocation enqueue
HW-0000000e-01c00082 mode=6  指向SEG$     特定區塊空間管理鎖
PW-00000001-00000000 mode=4
KO-00010013-00000001 mode=6
MR-00000007-00000002 mode=4  
MR-00000006-00000002 mode=4
MR-00000008-00000002 mode=4
MR-000000c9-00000002 mode=4
MR-00000003-00000002 mode=4



使用道具 舉報

回復
認證徽章
論壇徽章:
0
3#
發表于 2017-7-11 17:23 | 只看該作者
本帖最后由 cdddata 于 2017-7-12 22:28 編輯

2.Create index online:
Session 1
SQL> drop index idx_text01;
SQL> alter session set events '10704 trace name context forever, level 12';
SQL> create index idx_text_ol on text_t1(OBJECT_ID) online;
Session 2
新窗口觀察V$LOCK中的會話持有鎖動態
SQL> select * from v$lock where sid=45;
ADDR KADDR SID TY        ID1  ID2   LMODE    REQUEST CTIME    BLOCK
---------------- ---------------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------
00000000BED5CD78 00000000BED5CDD0  45 DL      89012    0       3  0    45 0
00000000BED5CE58 00000000BED5CEB0  45 AE        100    0       4  0 11379 0
00000000BED5D398 00000000BED5D3F0  45 DL      89012    0       3  0    45 0
00000000BED5D478 00000000BED5D4D0  45 OD      89012    0       4  0    45 0
00007F2A281DA3A8 00007F2A281DA408  45 TM      89012    0       2  0    45 0
00007F2A281DA3A8 00007F2A281DA408  45 TM      89042    0       4  0    45 0
00000000BBE04B08 00000000BBE04BB8  45 TS 14   25597834       6  0     7 0
00000000BBF03CC8 00000000BBF03D40  45 TX      65555 1310       6  0    45 0
00000000BBF44768 00000000BBF447E0  45 TX      65562 1294       6  0     7 0


SQL> select object_name from dba_objects where object_id=89042;

OBJECT_NAME
--------------------------------------------------------------------------------------------------------------------------------
SYS_JOURNAL_89041      Create index online執行過程中會創建一個臨時對象,并在執行結束前刪除對象和釋放鎖。

Session 1
SQL> create index idx_text_ol on text_t1(OBJECT_ID) online;
Index created.
SQL> alter session set events '10704 trace name context off';

Linux
[[email protected] trace]$ more orcl_ora_55118.trc 從OS從提取日志分析

TM-00015bb4-00000000 mode=2     指向TEXT_T1  開頭持有結尾釋放。持有2號TM鎖,不阻塞DML操作
TM-00015bd2-00000000 mode=4     指向SYS_JOURNAL_89041臨時對象
TM-00000012-00000000 mode=3     指向OBJ$              持有再釋放,首尾兩次
TM-0000001c-00000000 mode=3     指向CON$             持有再釋放,首尾兩次
TM-0000000e-00000000 mode=3     指向SEG$              持有再釋放 重復九次
TM-00000014-00000000 mode=3     指向ICOL$            持有再釋放 重復四次
TM-00000013-00000000 mode=3     指向IND$              持有再釋放 重復四次
TM-00000004-00000000 mode=3     指向TAB$              持有再釋放 首尾兩次
TM-00000015-00000000 mode=3     指向COL$             持有再釋放 重復兩次
TM-00000020-00000000 mode=3     指向CCOL$           持有再釋放 重復兩次
TM-0000001f-00000000 mode=3     指向CDEF$             持有再釋放 重復兩次
TM-00000092-00000000 mode=3     指向IND_ONLINE$     持有再釋放 重復三次
TM-000001c7-00000000 mode=3     指向IND_STATS$      持有再釋放 重復三次
TM-000001eb-00000000 mode=3     指向WRI$_OPTSTAT_IND_HISTORY
TM-000137d9-00000000 mode=3     指向SDO_GEOR_DDL__TABLE$$
TM-000000db-00000000 mode=3     指向OBJECT_USAGE     
TM-000001c9-00000000 mode=3     指向CACHE_STATS_1$
TM-00000089-00000000 mode=3     指向COM$  
TM-000001c0-00000000 mode=3     指向HIST_HEAD$
TM-000000b6-00000000 mode=3     指向TRANSIENT_IOT$
TM-00000282-00000000 mode=3     指向SUMDELTA$
TM-0000027f-00000000 mode=3     指向SUMPARTLOG$
TM-00000286-00000000 mode=3     指向SNAP_LOADERTIME$   
TM-000137d9-00000000 mode=3     指向SDO_GEOR_DDL__TABLE$$
TM-000000e1-00000000 mode=3     指向IDL_UB1$
TM-000000e2-00000000 mode=3     指向IDL_CHAR$
TM-000000e3-00000000 mode=3     指向IDL_UB2$
TM-000000e4-00000000 mode=3     指向IDL_SB4$
TM-000000f2-00000000 mode=3     指向NCOMP_DLL$
TM-0000003d-00000000 mode=3     指向OBJAUTH$
TM-00000072-00000000 mode=3     指向ICOLDEP$  
TM-00000097-00000000 mode=3     指向JIJOIN$
TM-0000009b-00000000 mode=3     指向JIREFRESHSQL$  
TM-0000007b-00000000 mode=3     指向ECOL$
TM-00000053-00000000 mode=3     指向COLTYPE$
TM-00000056-00000000 mode=3     指向SUBCOLTYPE$   
TM-00000058-00000000 mode=3     指向NTAB$
TM-00000050-00000000 mode=3     指向LOB$
TM-0000005c-00000000 mode=3     指向REFCON$
TM-0000005f-00000000 mode=3     指向OPQTYPE$

Create index online時,持有2號TM鎖在TEXT_T1上,索引創建完成時釋放鎖;重建索引期間不會堵塞其它事務的DML操作,也保證了一定的并發性;
Create index online執行中系統會自動創建一個SYS_JOURNAL_XXXXX系統臨時日志表,用來存放Create index Online過程中索引變化的記錄日志,持有4號TM鎖,并在TEXT_T1的2號TM鎖釋放之前進行釋放。
Create index online相比Create index,執行過程中持有的3號TM鎖更多,數據字典表更新更頻繁。

TX鎖的記錄以及加到哪個對象上(按時間先后):
OBJ$:
TX-00050009-000009e4 mode=6
CON$:
TX-0005001a-000009db mode=6
SYS_JOURNAL_89041:
TX-00050005-000009df mode=6
TX-0005000e-000009e4 mode=6
ICOL$:
TX-0005001e-000009e0 mode=6
TX-0005001b-000009dd mode=6
CCOL$:
TX-00050020-000009e1 mode=6
TX-00050002-000009e4 mode=6
TX-00050008-000009e5 mode=6
SEG$
TX-00010013-0000051e mode=6
TX-00010014-0000051e mode=6
TX-00010017-0000051e mode=6
TX-00010000-0000051a mode=6
TX-0001001a-0000050e mode=6
TX-0001001c-0000051c mode=6
TX-0001001b-0000051d mode=6
TX-00010019-0000051e mode=6
TX-00010004-0000051e mode=6
TX-0001001f-0000051e mode=6
TX-00010016-0000051d mode=6
TX-0001000a-0000051d mode=6
TX-0001000c-0000051e mode=6
TX-00010012-0000051d mode=6
TX-00010007-0000051e mode=6
TX-00010008-0000051e mode=6
TX-00010015-0000051e mode=6
TX-00010003-0000051f mode=6
TX-00010002-0000051d mode=6
TX-00010021-0000051d mode=6
TX-0001001d-0000051d mode=6
TX-00010009-0000051f mode=6
TX-0001000e-0000051e mode=6
TX-00010011-0000051e mode=6
TX-00010020-0000051f mode=6
TX-00010001-0000051f mode=6
TX-00010006-0000051f mode=6
TX-00010018-0000051e mode=6
TX-00010005-0000051a mode=6
TX-00010010-0000051e mode=6
TX-0001001e-0000051f mode=6
TX-0001000b-0000051f mode=6
TX-0001000d-0000051f mode=6
TX-00010017-0000051f mode=6
TX-00010000-0000051b mode=6
TX-00010014-0000051f mode=6
TX-0001001c-0000051d mode=6
TX-0001001b-0000051e mode=6
TX-00010019-0000051f mode=6
TX-00010004-0000051f mode=6
TX-0001001f-0000051f mode=6
TX-00010016-0000051e mode=6
TX-0001000a-0000051e mode=6
TX-0001000c-0000051f mode=6
TX-00010012-0000051e mode=6
TX-0001000f-0000051f mode=6
TX-00010007-0000051f mode=6
TX-00010008-0000051f mode=6
TX-00010015-0000051f mode=6
TX-00010003-00000520 mode=6
TX-00010002-0000051e mode=6
TX-00010003-00000520 mode=6
TX-00010002-0000051e mode=6
TX-00010021-0000051e mode=6
TX-0001001d-0000051e mode=6
TX-00010009-00000520 mode=6
TX-0001000e-0000051f mode=6
TX-00010011-0000051f mode=6
TX-00010020-00000520 mode=6
TX-00010001-00000520 mode=6
TX-00010006-00000520 mode=6
TX-00010018-0000051f mode=6
TX-00010005-0000051b mode=6
TX-00010010-0000051f mode=6
TX-0001001e-00000520 mode=6
TX-0001000b-00000520 mode=6
TX-0001000d-00000520 mode=6
TX-00010017-00000520 mode=6
TX-00010000-0000051c mode=6
TX-00010014-00000520 mode=6
TX-0001001c-0000051e mode=6
TX-0001001b-0000051f mode=6
TX-00010019-00000520 mode=6
TX-00010004-00000520 mode=6
TX-0001001f-00000520 mode=6
TX-00010016-0000051f mode=6
TX-0001000a-0000051f mode=6
TX-0001000c-00000520 mode=6
TX-00010012-0000051f mode=6
TX-0001000f-00000520 mode=6
TX-00010007-00000520 mode=6
TX-00010008-00000520 mode=6
TX-00010015-00000520 mode=6
TX-00010003-00000521 mode=6
TX-00010002-0000051f mode=6
TX-00010021-0000051f mode=6
TX-0001001d-0000051f mode=6
TX-00010009-00000521 mode=6
TX-0001000e-00000520 mode=6
TX-00010011-00000520 mode=6
TX-00010020-00000521 mode=6
TX-00010001-00000521 mode=6
TX-00010006-00000521 mode=6
TX-00010018-00000520 mode=6
TX-00010005-0000051c mode=6
TX-00010010-00000520 mode=6
TX-0001001e-00000521 mode=6
TX-0001000b-00000521 mode=6
TX-0001000d-00000521 mode=6
TX-00010017-00000521 mode=6
TX-00010000-0000051d mode=6
TX-00010014-00000521 mode=6
TX-0001001c-0000051f mode=6
TX-0001001b-00000520 mode=6
TX-00010019-00000521 mode=6
TX-00010004-00000521 mode=6
TX-0001001f-00000521 mode=6
TX-00010016-00000520 mode=6
TX-0001000a-00000520 mode=6
TX-0001000c-00000521 mode=6
TX-00010012-00000520 mode=6
TX-0001000f-00000521 mode=6
TX-00010007-00000521 mode=6
TX-00010008-00000521 mode=6
TX-00010015-00000521 mode=6
TX-00010003-00000522 mode=6
TX-00010002-00000520 mode=6
TX-00010021-00000520 mode=6
TX-0001001d-00000520 mode=6
TX-00010009-00000522 mode=6
TX-0001000e-00000521 mode=6
TX-00010011-00000521 mode=6
TX-00010020-00000522 mode=6
TX-00010001-00000522 mode=6
TX-00010006-00000522 mode=6
TX-00010018-00000521 mode=6
TX-00010005-0000051d mode=6
TX-00010010-00000521 mode=6
TX-0001001e-00000522 mode=6
TX-0001000b-00000522 mode=6
TX-0001000d-00000522 mode=6
TX-00010017-00000522 mode=6
TX-00010000-0000051e mode=6
TX-00010014-00000522 mode=6
TX-0001001c-00000520 mode=6
TX-0001001b-00000521 mode=6
TX-00010019-00000522 mode=6
TX-00010004-00000522 mode=6
TX-0001001f-00000522 mode=6
TX-00010016-00000521 mode=6
TX-0001000a-00000521 mode=6
TX-0001000c-00000522 mode=6
TX-00010012-00000521 mode=6
TX-0001000f-00000522 mode=6
TX-00010007-00000522 mode=6
TX-00010008-00000522 mode=6
TX-00010015-00000522 mode=6
TX-00010003-00000523 mode=6
TX-00010002-00000521 mode=6
TX-00010021-00000521 mode=6
TX-0001001d-00000521 mode=6
TX-00010009-00000523 mode=6
TX-0001000e-00000522 mode=6
TX-00010011-00000522 mode=6
TX-00010020-00000523 mode=6
TX-00010001-00000523 mode=6
TX-00010006-00000523 mode=6
TX-00010018-00000522 mode=6
TX-00010005-0000051e mode=6
TX-00010010-00000522 mode=6
TX-0001001e-00000523 mode=6
TX-0001000b-00000523 mode=6
TX-0001000d-00000523 mode=6
TX-00010017-00000523 mode=6
TX-00010000-0000051f mode=6
TX-00010014-00000523 mode=6
TX-0001001c-00000521 mode=6
TX-0001001b-00000522 mode=6
TX-00010019-00000523 mode=6
TX-00010004-00000523 mode=6
TX-0001001f-00000523 mode=6
TX-00010016-00000522 mode=6
TX-0001000a-00000522 mode=6
TX-0001000c-00000523 mode=6
TX-00010012-00000522 mode=6

WRI$_OPTSTAT_IND_HISTORY:
TX-0001000f-00000523 mode=6
IND$:
TX-00010007-00000523 mode=6
TX-0004000b-00000795 mode=6
TX-0007000e-00000738 mode=6
TX-0008000e-00000604 mode=6

其他鎖(系統鎖)的記錄:
CU-XXXXXXX-00000000 mode=6    Cursor bind 游標綁定鎖 多個
DL-00015bb4-00000000 mode=3   指向TEXT_T1
DL-00015bd2-00000000 mode=3   指向臨時對象SYS_JOURNAL_89041
ZH-00015bd2-00000001 mode=6   指向臨時對象SYS_JOURNAL_89041
ZH-00015bd2-00000002 mode=6   指向臨時對象SYS_JOURNAL_89041
ZH-00015bd2-00000003 mode=6   指向臨時對象SYS_JOURNAL_89041
ZH-00015bd2-00000004 mode=6   指向臨時對象SYS_JOURNAL_89041
OD-00015bb4-00000000 mode=4   指向TEXT_T1
TT-0000000e-00000010 mode=4    指向SEG$
TS-0000000e-01c00082 mode=6    指向SEG$
TS-0000000e-0186978a mode=6    指向SEG$
TS-0000000e-01c00083 mode=6    指向SEG$
FB-0000000e-01c00080 mode=6    指向SEG$
SE-0000002d-00000005 mode=4
HW-0000000e-0186978a mode=6   指向SEG$
RO-00010013-00000001 mode=6
CR-00010013-00000002 mode=6
CR-00010013-00000001 mode=6
CR-00010013-00000002 mode=6
MR-00000002-00000002 mode=4
TO-000137d9-00000001 mode=3   指向SDO_GEOR_DDL__TABLE$$
TO-000137d9-00000002 mode=3   指向SDO_GEOR_DDL__TABLE$$
SE-0000002d-00000005 mode=4

使用道具 舉報

回復
認證徽章
論壇徽章:
0
4#
發表于 2017-7-11 17:23 | 只看該作者
本帖最后由 cdddata 于 2017-7-12 22:29 編輯

五、Offline rebuildOnline rebuild索引鎖的跟蹤對比
1.alter index rebuild

Session 1

SQL> drop index idx_text01;
SQL> create index ind_text02 on text_t1(object_id);
SQL> update text_t1 set OBJECT_ID=666 where OBJECT_ID<1000;
510464 rows updated.
SQL> alter session set events '10704 trace name context forever, level 12';
SQL> alter index ind_text02 rebuild;

Session 2
觀察V$lock
SQL> select * from v$lock where sid=45;
ADDR KADDR SID TY        ID1  ID2   LMODE    REQUEST CTIME    BLOCK
---------------- ---------------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------
00000000BED5CBB8 00000000BED5CC10  45 OD      89050    0       6  0    60 0
00000000BED5CC98 00000000BED5CCF0  45 DL      89012    0       3  0    60 0
00000000BED5CE58 00000000BED5CEB0  45 AE        100    0       4  0   257 0
00000000BED5D650 00000000BED5D6A8  45 DL      89012    0       3  0    60 0
00007FCD9BB78810 00007FCD9BB78870  45 TM      89012    0       4  0    60 0
00000000BBE04B08 00000000BBE04BB8  45 TS 14   25855426       6  0    25 0
00000000BBED43E8 00000000BBED4460  45 TX     131098 1519       6  0    25 0

SQL> select object_name from dba_objects where object_id=89050;
OBJECT_NAME
--------------------------------------------------------------------------------------------------------------------------------
IND_TEXT02     6號OD鎖指向rebuild索引IND_TEXT02

Session 1
SQL> alter session set events '10704 trace name context off';

Linux
[[email protected] trace]$ more orcl_ora_43002.trc

TM-00015bb4-00000000 mode=4     指向TEXT_T1  開頭持有結尾釋放。 持有4號TM鎖,會阻塞DML操作

TM-0000000e-00000000 mode=3     指向SEG$ 持有再釋放,重復兩次
TM-000001eb-00000000 mode=3     指向WRI$_OPTSTAT_IND_HISTORY
TM-000001c9-00000000 mode=3     指向CACHE_STATS_1$
TM-000001c7-00000000 mode=3     指向IND_STATS$   
TM-00000013-00000000 mode=3     指向IND$
TM-00000012-00000000 mode=3     指向OBJ$

Alter index rebuild執行中會有4號TM鎖去鎖定TEXT_T1表,堵塞其他事務的DML操作。同時以3號TM鎖去鎖定SEG$,WRI$_OPTSTAT_IND_HISTORY,CACHE_STATS_1$,IND_STATS$ ,IND$,OBJ$數據字典表,對其進行DML(Insert)操作來更新維護數據字典表信息。

TX鎖的記錄以及加到哪個對象上(按時間先后):
TEXT_T1:
TX-00010011-0000052b mode=6
SEG$
TX-00010006-0000052c mode=6
TX-00010001-0000052c mode=6
TX-00010005-00000527 mode=6
TX-0002001a-000005ef mode=6
TX-0002001f-000005f4 mode=6
TX-00020016-000005f4 mode=6
TX-00020019-000005f4 mode=6
TX-0002001e-000005f4 mode=6
TX-0002000f-000005f3 mode=6
TX-00020018-000005f1 mode=6
TX-00020013-000005f4 mode=6
TX-00020012-000005f4 mode=6
TX-00020002-000005f4 mode=6
TX-00020020-000005f4 mode=6
TX-00020015-000005f5 mode=6
TX-0002001d-000005f4 mode=6
TX-00020004-000005f5 mode=6
TX-00020007-000005f6 mode=6
TX-00020003-000005f6 mode=6
TX-00020014-000005eb mode=6
TX-00020009-000005f4 mode=6
TX-00020011-000005f4 mode=6
TX-00020021-000005f5 mode=6
TX-00020005-000005f4 mode=6
TX-00020006-000005f6 mode=6
TX-0002000a-000005f6 mode=6
TX-00020008-000005f5 mode=6
TX-0002001b-000005f5 mode=6
TX-00020001-000005f5 mode=6
TX-00020010-000005f5 mode=6
TX-0002000d-000005f5 mode=6
TX-00020000-000005f7 mode=6
TX-0002001c-000005f5 mode=6
TX-0002000c-000005f4 mode=6
TX-0002000b-000005f6 mode=6
TX-00020017-000005f5 mode=6
TX-0002000e-000005f5 mode=6
TX-0002001f-000005f5 mode=6
TX-00020016-000005f5 mode=6
TX-00020019-000005f5 mode=6
TX-0002001e-000005f5 mode=6
TX-0002000f-000005f4 mode=6
TX-00020018-000005f2 mode=6
TX-00020012-000005f5 mode=6
TX-00020002-000005f5 mode=6
TX-00020020-000005f5 mode=6
TX-00020015-000005f6 mode=6
TX-0002001d-000005f5 mode=6
TX-00020004-000005f6 mode=6
TX-00020007-000005f7 mode=6
TX-00020003-000005f7 mode=6
TX-00020014-000005ec mode=6
TX-00020009-000005f5 mode=6
TX-00020011-000005f5 mode=6
TX-00020021-000005f6 mode=6
TX-00020005-000005f5 mode=6
TX-00020006-000005f7 mode=6
TX-0002000a-000005f7 mode=6
TX-00020008-000005f6 mode=6
TX-0002001b-000005f6 mode=6
TX-00020001-000005f6 mode=6
TX-00020010-000005f6 mode=6
TX-0002000d-000005f6 mode=6
TX-00020000-000005f8 mode=6
TX-0002001c-000005f6 mode=6
TX-0002000c-000005f5 mode=6
TX-0002000b-000005f7 mode=6
TX-00020017-000005f6 mode=6
TX-0002000e-000005f6 mode=6
TX-0002001f-000005f6 mode=6
TX-00020016-000005f6 mode=6
TX-00020019-000005f6 mode=6
TX-0002001e-000005f6 mode=6
TX-0002000f-000005f5 mode=6
TX-00020018-000005f3 mode=6
TX-00020013-000005f6 mode=6
TX-00020012-000005f6 mode=6
TX-00020002-000005f6 mode=6
TX-00020020-000005f6 mode=6
TX-00020015-000005f7 mode=6
TX-0002001d-000005f6 mode=6
TX-00020004-000005f7 mode=6
TX-00020007-000005f8 mode=6
TX-00020003-000005f8 mode=6
TX-00020014-000005ed mode=6
TX-00020009-000005f6 mode=6
TX-00020011-000005f6 mode=6
TX-00020021-000005f7 mode=6
TX-00020005-000005f6 mode=6
TX-00020006-000005f8 mode=6
TX-0002000a-000005f8 mode=6
TX-00020008-000005f7 mode=6
TX-0002001b-000005f7 mode=6
TX-00020001-000005f7 mode=6
TX-00020010-000005f7 mode=6
TX-0002000d-000005f7 mode=6
TX-00020000-000005f9 mode=6
TX-0002001c-000005f7 mode=6
TX-0002000c-000005f6 mode=6
TX-0002000b-000005f8 mode=6
TX-00020017-000005f7 mode=6
TX-0002000e-000005f7 mode=6
TX-0002001f-000005f7 mode=6
TX-00020016-000005f7 mode=6
TX-00020019-000005f7 mode=6
TX-0002001e-000005f7 mode=6
TX-0002000f-000005f6 mode=6
TX-00020018-000005f4 mode=6
TX-00020013-000005f7 mode=6
TX-00020012-000005f7 mode=6
TX-00020002-000005f7 mode=6
TX-00020020-000005f7 mode=6
TX-00020015-000005f8 mode=6
TX-0002001d-000005f7 mode=6
TX-00020004-000005f8 mode=6
TX-00020007-000005f9 mode=6
TX-00020003-000005f9 mode=6
TX-00020014-000005ee mode=6
TX-00020009-000005f7 mode=6
TX-00020011-000005f7 mode=6
TX-00020021-000005f8 mode=6
TX-00020005-000005f7 mode=6
TX-00020006-000005f9 mode=6
TX-0002000a-000005f9 mode=6
TX-00020008-000005f8 mode=6
TX-0002001b-000005f8 mode=6
TX-00020001-000005f8 mode=6
TX-00020010-000005f8 mode=6
TX-0002000d-000005f8 mode=6
TX-00020000-000005fa mode=6
TX-0002001c-000005f8 mode=6
TX-0002000c-000005f7 mode=6
TX-0002000b-000005f9 mode=6
TX-00020017-000005f8 mode=6
TX-0002000e-000005f8 mode=6
TX-0002001f-000005f8 mode=6
TX-00020016-000005f8 mode=6
TX-00020019-000005f8 mode=6
TX-0002001e-000005f8 mode=6
TX-0002000f-000005f7 mode=6
TX-00020018-000005f5 mode=6
TX-00020013-000005f8 mode=6
TX-00020012-000005f8 mode=6
TX-00020002-000005f8 mode=6
TX-00020020-000005f8 mode=6
TX-00020015-000005f9 mode=6
TX-0002001d-000005f8 mode=6
TX-00020004-000005f9 mode=6
TX-00020007-000005fa mode=6
TX-00020003-000005fa mode=6
TX-00020014-000005ef mode=6
TX-00020009-000005f8 mode=6
TX-00020011-000005f8 mode=6
TX-00020021-000005f9 mode=6
TX-00020005-000005f8 mode=6
TX-00020006-000005fa mode=6
TX-0002000a-000005fa mode=6
TX-00020008-000005f9 mode=6
TX-0002001b-000005f9 mode=6
TX-00020001-000005f9 mode=6
TX-00020010-000005f9 mode=6
TX-0002000d-000005f9 mode=6
TX-00020000-000005fb mode=6
TX-0002001c-000005f9 mode=6
TX-0002000c-000005f8 mode=6
TX-0002000b-000005fa mode=6
TX-00020017-000005f9 mode=6
TX-0002000e-000005f9 mode=6
TX-0002001f-000005f9 mode=6
TX-00020016-000005f9 mode=6
TX-00020019-000005f9 mode=6
TX-0002001e-000005f9 mode=6
WRI$_OPTSTAT_IND_HISTORY
TX-0002000f-000005f8 mode=6

SEG$
TX-00070010-0000074a mode=6

其他鎖(系統鎖)的記錄:
CU-XXXXXXX-00000000 mode=6    Cursor bind 游標綁定鎖 多個
DL-00015bb4-00000000 mode=3     指向TEXT_T1
OD-00015bda-00000000 mode=6     指向IND_TEXT02
FB-0000000e-018a85c0 mode=6     指向SEG$
TT-00000003-00000010 mode=4     指向I_OBJ#
TS-0000000e-018a85c2 mode=6     指向SEG$
TS-0000000e-01c00082 mode=6     指向SEG$
TS-0000000e-01c00083 mode=6     指向SEG$
HW-0000000e-018a85c2 mode=6     指向SEG$
DL-00015bb4-00000000 mode=3     指向TEXT_T1
PW-00000001-00000000 mode=4
MR-00000002-00000002 mode=4

使用道具 舉報

回復
認證徽章
論壇徽章:
0
5#
發表于 2017-7-11 17:23 | 只看該作者
本帖最后由 cdddata 于 2017-7-12 22:30 編輯

2.Alter index rebuild online
Session 1

SQL> update text_t1 set OBJECT_ID=321 where OBJECT_ID=666;
SQL> alter session set events '10704 trace name context forever, level 12';
SQL> alter index ind_text02 rebuild online;

Session 2
SQL> select * from v$lock where sid=45;
ADDR KADDR SID TY        ID1  ID2   LMODE    REQUEST CTIME    BLOCK
---------------- ---------------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------
00000000BED5CE58 00000000BED5CEB0  45 DL      89012    0       3  0    73 0
00000000BED5D2B8 00000000BED5D310  45 TO      79833    1       3  0 48673 0
00000000BED5D398 00000000BED5D3F0  45 OD      89012    0       4  0    73 0
00000000BED5D558 00000000BED5D5B0  45 AE        100    0       4  0 48807 0
00000000BED5D650 00000000BED5D6A8  45 DL      89012    0       3  0    73 0
00000000BED5D730 00000000BED5D788  45 OD      89050    0       6  0    73 0
00007F4A6A48A3A8 00007F4A6A48A408  45 TM      89012    0       2  0    73 0
00007F4A6A48A3A8 00007F4A6A48A408  45 TM      89065    0       4  0    73 0
00000000BBE04B08 00000000BBE04BB8  45 TS 14   29360362       6  0    25 0
00000000BBEE55A8 00000000BBEE5620  45 TX     196637 1845       6  0    25 0
00000000BBF33FB8 00000000BBF34030  45 TX     196630 1844       6  0    73 0

SQL> select object_name from dba_objects where object_id in (89012,89065,89050);
OBJECT_NAME
--------------------------------------------------------------------------------------------------------------------------------
TEXT_T1                               2號TM鎖指向TEXT_T1;
SYS_JOURNAL_89050           4號TM鎖指向臨時對象SYS_JOURNAL_89050,執行結束前釋放鎖和刪除對象
IND_TEXT02                         6號OD鎖指向rebuild索引IND_TEXT02

Session 1
SQL> alter session set events '10704 trace name context off';

Linux
[[email protected] trace]$ more orcl_ora_43002.trc

TM-00015bb4-00000000 mode=2      指向TEXT_T1  開頭持有結尾釋放。持有2號TM鎖,不阻塞DML操作

TM-00000012-00000000 mode=3      指向OBJ$    持有再釋放 重復三次
TM-0000001c-00000000 mode=3      指向CON$    持有再釋放 重復兩次
TM-00015be5-00000000 mode=4      指向SYS_JOURNAL_89050    持有再釋放 重復兩次
TM-0000000e-00000000 mode=3      指向SEG$    持有再釋放 重復十一次
TM-00000014-00000000 mode=3      指向ICOL$   持有再釋放 重復兩次
TM-00000013-00000000 mode=3      指向IND$    持有再釋放 重復四次
TM-00000004-00000000 mode=3      指向TAB$    末尾持有再釋放 重復兩次
TM-00000015-00000000 mode=3      指向COL$    持有再釋放 重復兩次
TM-00000020-00000000 mode=3      指向CCOL$   持有再釋放 重復三次
TM-0000001f-00000000 mode=3      指向CDEF$   持有再釋放 重復四次
TM-000001c7-00000000 mode=3      指向IND_STATS$  持有再釋放 重復三次
TM-00000092-00000000 mode=3      指向IND_ONLINE$ 持有再釋放 重復三次
TM-000000b4-00000000 mode=3      指向INDREBUILD$ 持有再釋放 重復三次
TM-000001eb-00000000 mode=3      指向WRI$_OPTSTAT_IND_HISTORY
TM-000137d9-00000000 mode=3      指向SDO_GEOR_DDL__TABLE$$  持有再釋放 重復兩次
TM-000000db-00000000 mode=3      指向OBJECT_USAGE
TM-000001c9-00000000 mode=3      指向CACHE_STATS_1$
TM-00000089-00000000 mode=3      指向COM$
TM-000001c0-00000000 mode=3      指向HIST_HEAD$
TM-000000b6-00000000 mode=3      指向COMPRESSION$
TM-00000282-00000000 mode=3      指向SUMDELTA$
TM-0000027f-00000000 mode=3      指向SUMPARTLOG$
TM-00000286-00000000 mode=3      指向SNAP_LOADERTIME$
TM-000000e1-00000000 mode=3      指向IDL_UB1$
TM-000000e2-00000000 mode=3      指向IDL_CHAR$
TM-000000e3-00000000 mode=3      指向IDL_UB2$
TM-000000e4-00000000 mode=3      指向IDL_SB4$
TM-000000f2-00000000 mode=3      指向NCOMP_DLL$
TM-0000003d-00000000 mode=3      指向OBJAUTH$
TM-00000072-00000000 mode=3      指向ICOLDEP$
TM-00000097-00000000 mode=3      指向JIJOIN$
TM-0000009b-00000000 mode=3      指向JIREFRESHSQL$
TM-0000007b-00000000 mode=3      指向ECOL$
TM-00000053-00000000 mode=3      指向COLTYPE$
TM-00000056-00000000 mode=3      指向SUBCOLTYPE$
TM-00000058-00000000 mode=3      指向NTAB$
TM-00000050-00000000 mode=3      指向LOB$
TM-0000005c-00000000 mode=3      指向REFCON$
TM-0000005f-00000000 mode=3      指向OPQTYPE$

Alter index rebuild online會在TEXT_T1表持有2號TM鎖,重建索引完成時釋放,期間不會堵塞DML操作,也保證了表的并發性能;
執行中會創建一個SYS_JOURNAL_XXXXX系統臨時日志表,用來存放index rebuild 過程中索引變化的記錄日志,持有4號TM鎖,在TEXT_T1的2號TM鎖釋放之前進行釋放。

TX鎖的記錄以及加到哪個對象上(按時間先后):
OBJ$:
TX-0005000c-00000a21 mode=6
TX-00050014-00000a22 mode=6
TX-0005000c-00000a21 mode=6
TX-00050014-00000a22 mode=6

CON$:
TX-00050021-00000a21 mode=6

SYS_JOURNAL_89050:
TX-0005001f-00000a1c mode=6
TX-00050004-000008dc mode=6

ICOL$:
TX-00050012-00000a1b mode=6
TX-00050017-00000a21 mode=6

CCOL$:
TX-00050006-00000a21 mode=6
TX-00050016-00000a1c mode=6

SYS_JOURNAL_89050:
TX-00020014-000005fe mode=6
TX-00020009-00000607 mode=6

SEG$:
TX-00020011-00000607 mode=6
TX-00020021-00000608 mode=6
TX-0002001d-00000607 mode=6
TX-00020005-00000607 mode=6
TX-00020006-00000609 mode=6
TX-0002000a-00000609 mode=6
TX-00020008-00000608 mode=6
TX-0002001b-00000608 mode=6
TX-00020001-00000608 mode=6
TX-00020010-00000608 mode=6
TX-0002000d-00000608 mode=6
TX-00020000-0000060a mode=6
TX-0002001c-00000608 mode=6
TX-0002000c-00000607 mode=6
TX-0002000c-00000608 mode=6
TX-0002000b-0000060a mode=6
TX-00020017-00000609 mode=6
TX-0002000e-00000609 mode=6
TX-0002001f-00000609 mode=6
TX-00020016-00000609 mode=6
TX-00020019-00000609 mode=6
TX-0002001e-00000609 mode=6
TX-0002000f-00000608 mode=6
TX-0002001a-000005ff mode=6
TX-00020018-00000606 mode=6
TX-00020013-00000609 mode=6
TX-00020012-00000609 mode=6
TX-00020002-00000609 mode=6
TX-00020020-00000609 mode=6
TX-00020015-0000060a mode=6
TX-00020007-0000060b mode=6
TX-00020003-0000060b mode=6
TX-00020011-00000609 mode=6
TX-00020021-0000060a mode=6
TX-00020009-00000609 mode=6
TX-00020005-00000609 mode=6
TX-00020006-0000060b mode=6
TX-0002000a-0000060b mode=6
TX-00020008-0000060a mode=6
TX-0002001b-0000060a mode=6
TX-00020001-0000060a mode=6
TX-00020010-0000060a mode=6
TX-0002000d-0000060a mode=6
TX-00020000-0000060c mode=6
TX-0002001c-0000060a mode=6
TX-0002000c-00000609 mode=6
TX-00020017-0000060a mode=6
TX-0002000e-0000060a mode=6
TX-0002001f-0000060a mode=6
TX-00020016-0000060a mode=6
TX-00020019-0000060a mode=6
TX-0002001e-0000060a mode=6
TX-0002000f-00000609 mode=6
TX-0002001a-00000600 mode=6
TX-00020018-00000607 mode=6
TX-00020013-0000060a mode=6
TX-00020012-0000060a mode=6
TX-00020002-0000060a mode=6
TX-00020015-0000060b mode=6
TX-00020004-0000060b mode=6
TX-00020007-0000060c mode=6
TX-00020003-0000060c mode=6
TX-00020011-0000060a mode=6
TX-00020021-0000060b mode=6
TX-00020009-0000060a mode=6
TX-00020006-0000060c mode=6
TX-0002000a-0000060c mode=6
TX-00020008-0000060b mode=6
TX-0002001b-0000060b mode=6
TX-00020001-0000060b mode=6
TX-00020010-0000060b mode=6
TX-0002000d-0000060b mode=6
TX-00020000-0000060d mode=6
TX-0002001c-0000060b mode=6
TX-0002000c-0000060a mode=6
TX-0002000b-0000060c mode=6
TX-00020017-0000060b mode=6
TX-0002000e-0000060b mode=6
TX-0002001f-0000060b mode=6
TX-00020016-0000060b mode=6
TX-00020019-0000060b mode=6
TX-0002001e-0000060b mode=6
TX-0002000f-0000060a mode=6
TX-0002001a-00000601 mode=6
TX-00020018-00000608 mode=6
TX-00020013-0000060b mode=6
TX-00020012-0000060b mode=6
TX-00020002-0000060b mode=6
TX-00020020-0000060b mode=6
TX-00020015-0000060c mode=6
TX-00020004-0000060c mode=6
TX-00020007-0000060d mode=6
TX-00020003-0000060d mode=6
TX-00020011-0000060b mode=6
TX-00020021-0000060c mode=6
TX-00020009-0000060b mode=6
TX-00020005-0000060b mode=6
TX-00020006-0000060d mode=6
TX-0002000a-0000060d mode=6
TX-00020008-0000060c mode=6
TX-0002001b-0000060c mode=6
TX-00020001-0000060c mode=6
TX-00020010-0000060c mode=6
TX-0002000d-0000060c mode=6
TX-0002000d-0000060c mode=6
TX-00020000-0000060e mode=6
TX-0002001c-0000060c mode=6
TX-0002000c-0000060b mode=6
TX-0002000b-0000060d mode=6
TX-00020017-0000060c mode=6
TX-0002000e-0000060c mode=6
TX-0002001f-0000060c mode=6
TX-00020016-0000060c mode=6
TX-00020019-0000060c mode=6
TX-0002001e-0000060c mode=6
TX-0002000f-0000060b mode=6
TX-0002001a-00000602 mode=6
TX-00020018-00000609 mode=6
TX-00020013-0000060c mode=6
TX-00020012-0000060c mode=6
TX-00020002-0000060c mode=6
TX-00020020-0000060c mode=6
TX-00020015-0000060d mode=6
TX-00020004-0000060d mode=6
TX-00020007-0000060e mode=6
TX-00020003-0000060e mode=6
TX-00020011-0000060c mode=6
TX-00020021-0000060d mode=6
TX-00020009-0000060c mode=6
TX-00020005-0000060c mode=6
TX-00020006-0000060e mode=6
TX-0002000a-0000060e mode=6
TX-00020008-0000060d mode=6
TX-0002001b-0000060d mode=6
TX-00020001-0000060d mode=6
TX-00020010-0000060d mode=6
TX-0002000d-0000060d mode=6
TX-00020000-0000060f mode=6
TX-0002001c-0000060d mode=6
TX-0002000c-0000060c mode=6

SDO_GEOR_DDL__TABLE$$:
TX-0005001c-00000a1e mode=6

SEG$:
TX-000a001b-000004ca mode=6
TX-0001001f-0000053b mode=6
TX-0006001a-00000a2e mode=6
TX-00050010-00000a21 mode=6

其他鎖(系統鎖)的記錄:
CU-XXXXXXX-00000000 mode=6    Cursor bind 游標綁定鎖 多個
OD-00015bda-00000000 mode=6     指向IND_TEXT02
TT-0000000e-00000010 mode=4     指向SEG$
TT-00000003-00000010 mode=4     指向I_OBJ#
DL-00015bb4-00000000 mode=3     指向TEXT_T1
DL-00015be9-00000000 mode=3     指向SYS_JOURNAL_89050臨時對象
ZH-00015be9-00000001 mode=6     指向SYS_JOURNAL_89050臨時對象
ZH-00015be9-00000002 mode=6     指向SYS_JOURNAL_89050臨時對象
ZH-00015be9-00000003 mode=6     指向SYS_JOURNAL_89050臨時對象
ZH-00015be9-00000004 mode=6     指向SYS_JOURNAL_89050臨時對象
TS-0000000e-01c000ea mode=6     指向SEG$
TS-0000000e-01893e02 mode=6     指向SEG$
HW-0000000e-01c00082 mode=6     指向SEG$
RO-00010013-00000001 mode=6
RO-00010013-00000002 mode=6
CR-00010013-00000001 mode=6
CR-00010013-00000002 mode=6

關于不同索引語句產生的鎖的總結:
offline create index /rebuild 和online create index /rebuild 的不同點
1.offline始終持有4號TM鎖來鎖定表,堵塞其他事務DML操作;online持有2號TM鎖來鎖定表,不會堵塞其他事務的DML操作,并發性能更好;
2.online會自動產生SYS_JOURNAL_XXXX的系統臨時表來記錄日志;
3.online時持有的3號TM鎖相比offline時要復雜得多。

create index和alter index rebuild的不同點
1.create index/online是新建索引,當table上沒有索引時,需要新建;
2.alter index rebuild/online是重建索引,當索引中刪除更改的索引中的被刪除項占總的項數的百分比
3.兩者維護的數據字典表數量有一定的差異  

使用道具 舉報

回復
認證徽章
論壇徽章:
0
6#
發表于 2017-7-11 17:23 | 只看該作者
本帖最后由 cdddata 于 2017-7-12 22:38 編輯

六、DROP/TRUNCATE/CREATE Table鎖的跟蹤分析
1.CREATE TABLE

create table test_t3 as select * from text;

TM-0000000e-00000000  mode=3  指向SEG$
TM-00000004-00000000  mode=3  指向TAB$
TM-00000015-00000000  mode=3  指向COL$

create table時被操作表本身不持有鎖,只是鎖了幾個數據字典表去更新

2.DROP TABLE
drop table test_t1
TM-00015b62-00000000 mode=6   指向TEXT_T1  開始持有最后釋放
TM-000137d9-00000000 mode=3    指向SDO_GEOR_DDL__TABLE$$
TM-00000282-00000000 mode=3    指向SUMDELTA$   
TM-0000027f-00000000 mode=3    指向SUMPARTLOG$
TM-00000286-00000000 mode=3    指向SNAP_LOADERTIME$
TM-0000008e-00000000 mode=3    指向RECYCLEBIN$
TM-000000e1-00000000 mode=3    指向IDL_UB1$  
TM-000000e2-00000000 mode=3    指向IDL_CHAR$
TM-000000e3-00000000 mode=3    指向IDL_UB2$
TM-000000e4-00000000 mode=3    指向IDL_SB4$
TM-000000e5-00000000 mode=3    指向ERROR$
TM-00000012-00000000 mode=3    指向OBJ$
TM-000137cf-00000000 mode=3    指向SDO_GEOR_SYSDATA_TABLE
TM-000139b3-00000000 mode=3    指向SDO_TIN_PC_SYSDATA_TABLE
TM-000139b1-00000000 mode=3    指向SDO_TIN_PC_SEQ  
TM-000137d9-00000000 mode=3    再次指向SDO_GEOR_DDL__TABLE$$
(以上TM鎖全部釋放后)
TM-00000012-00000000 mode=3    指向OBJ$  
TM-0000000e-00000000 mode=3    指向SEG$

drop table持有6號TM排他鎖,禁止其他事務執行任何DML語句。

3.TRUNCATE TABLE
truncate table test_t2
TM-00015b46-00000000  mode=6   指向TEST_T2 開始持有最后釋放
TM-0000028a-00000000  mode=3   指向MLOG$
TM-000001e4-00000000  mode=3   指向MON_MODS$
TM-00000047-00000000  mode=3   指向SUPEROBJ$
TM-000001c5-00000000  mode=3   指向TAB_STATS$
TM-00000004-00000000  mode=3   指向TAB$  
TM-0000000e-00000000  mode=3   指向SEG$
TM-00000012-00000000  mode=3   指向OBJ$
(以上TM鎖全部釋放后)
TM-0000000e-00000000  mode=3   指向SEG$  

truncate table持有6號TM排他鎖,禁止其他事務執行任何DML語句。


、


鎖模式
鎖描述
解釋
sql操作
0
none


1
null
預留模式,僅起標志作用

           2
Row-S 行共享(RS)
行級共享鎖,其他對象只能查詢這些數據行
Create index online,Alter index rebuild online
3
Row-X 行專用(RX)
行級排他鎖,在提交前不允許做DML操作
insert into table,update table,delete from xxx
4
Share 共享鎖(S)
共享鎖
Create index,Alter index rebuild
5
S/Row-X 共享行專用(SRX)
共享行級排他鎖

           6
exclusive 專用(X)
排他鎖
drop table,truncate table,drop index

使用道具 舉報

回復
認證徽章
論壇徽章:
0
7#
發表于 2017-7-11 17:24 | 只看該作者
本帖最后由 cdddata 于 2017-7-12 22:38 編輯

發完了

使用道具 舉報

回復
認證徽章
論壇徽章:
0
8#
發表于 2017-7-12 22:39 | 只看該作者
自頂一下

使用道具 舉報

回復
論壇徽章:
70
夏利
日期:2013-09-29 21:02:15天蝎座
日期:2016-03-08 22:25:51嫦娥
日期:2014-03-04 16:46:45ITPUB年度最佳技術原創精華獎
日期:2014-03-04 16:19:29馬上加薪
日期:2014-02-19 11:55:14馬上有對象
日期:2014-02-19 11:55:14馬上有錢
日期:2014-02-19 11:55:14馬上有房
日期:2014-02-19 11:55:14馬上有車
日期:2014-02-19 11:55:14馬上有車
日期:2014-02-18 16:41:11
9#
發表于 2017-7-13 09:01 | 只看該作者
挺好,期待LZ后續好文。

使用道具 舉報

回復
論壇徽章:
1
秀才
日期:2017-08-18 11:04:35
10#
發表于 2017-7-17 17:36 | 只看該作者
很好的文章,支持支持,贊一個。

使用道具 舉報

回復

您需要登錄后才可以回帖 登錄 | 注冊

本版積分規則 發表回復

DTCC2020中國數據庫技術大會 限時8.5折

【架構革新 高效可控】2020年9月21日~23日第十一屆中國數據庫技術大會將在北京隆重召開。

大會設置2大主會場,20+技術專場,將邀請超百位行業專家,重點圍繞數據架構、AI與大數據、傳統企業數據庫實踐和國產開源數據庫等內容展開分享和探討,為廣大數據領域從業人士提供一場年度盛會和交流平臺。

http://dtcc.it168.com


大會官網>>
30岁的男人干啥赚钱快赚钱多 看懂股票k线图 陕西11选五中奖规则表 永利棋牌怎么修改网页 涨停股票的操作 熊猫棋牌安卓版下载 重庆时时开奖历史结果 赛车小游戏 澳洲幸运8开奖官网 一分钟一开的彩票平台 河北20选5奖结果查询
TOP技術積分榜 社區積分榜 徽章 團隊 統計 知識索引樹 積分競拍 文本模式 幫助
  ITPUB首頁 | ITPUB論壇 | 數據庫技術 | 企業信息化 | 開發技術 | 微軟技術 | 軟件工程與項目管理 | IBM技術園地 | 行業縱向討論 | IT招聘 | IT文檔
  ChinaUnix | ChinaUnix博客 | ChinaUnix論壇
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓優訊信息技術有限公司版權所有 聯系我們 
京ICP備09055130號-4  北京市公安局海淀分局網監中心備案編號:11010802021510 廣播電視節目制作經營許可證:編號(京)字第1149號
  
快速回復 返回頂部 返回列表
看懂股票k线图 陕西11选五中奖规则表 永利棋牌怎么修改网页 涨停股票的操作 熊猫棋牌安卓版下载 重庆时时开奖历史结果 赛车小游戏 澳洲幸运8开奖官网 一分钟一开的彩票平台 河北20选5奖结果查询