[20180402]行連結行遷移與ITL槽6.txt
[20180402]行連結行遷移與ITL槽6.txt
--//上個星期測試行遷移與ITL浪費的問題,連結http://blog.itpub.net/267265/viewspace-2152265/
--//當時遇到一個問題,就是oracle為什麼每次發生行遷移要建立一個ITL槽.
--//在別人的指點下,終於明白為什麼,實際上的目的是為了避免ITL不足.
--//以前測試的連結:
[20160726]行連結行遷移與ITL槽.txt
[20160727]行連結行遷移與ITL槽2.txt
[20160728]行連結行遷移與ITL槽3.txt
[20160728]行連結行遷移與ITL槽4.txt
[20160729]行連結行遷移與ITL槽4.txt
http://blog.itpub.net/267265/viewspace-2122700/
http://blog.itpub.net/267265/viewspace-2122663/
http://blog.itpub.net/267265/viewspace-2122599/
http://blog.itpub.net/267265/viewspace-2122712/
--//還是透過例子說明問題.
1.環境:
SCOTT@book> @ &r/ver1
PORT_STRING VERSION BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
create table t (id number,pad varchar2(200));
alter table t pctfree 0;
create unique index pk_t on t(id);
alter table t add constraint pk_t primary key (id) enable validate;
insert into t(id) select rownum from dual connect by level<=734;
commit ;
SCOTT@book> select rowid,id from t where id =1 or id=734 or id=733;
ROWID ID
------------------ ----------
AAAWEKAAEAAAAImAAA 1
AAAWEKAAEAAAAImALc 733
AAAWEKAAEAAAAInAAA 734
--// 僅僅id=734在另外的塊中。
2.測試:
SCOTT@book> update t set pad=lpad('x',20,'x') ;
734 rows updated.
--//注意不要提交.
SCOTT@book> @ &r/rowid AAAWEKAAEAAAAImAAA
OBJECT FILE BLOCK ROW ROWID_DBA DBA TEXT
---------- ---------- ---------- ---------- -------------------- -------------------- ----------------------------------------
90378 4 550 0 0x1000226 4,550 alter system dump datafile 4 block 550 ;
SYS@book> alter system checkpoint ;
System altered.
SYS@book> alter system checkpoint ;
System altered.
--//保證寫盤.
SYS@book> alter system dump datafile 4 block 550 ;
System altered.
$ grep nrid /u01/app/oracle/diag/rdbms/book/book/trace/book_ora_407.trc | cut -d":" -f2 | cut -d"." -f1 | sort | uniq -c
134 0x01000223
134 0x01000224
134 0x01000225
135 0x01000227
134 0x01000234
62 0x01000235
--//136+134+134+134+134+61=733,有733行出現了遷移,有一點極端.^_^.全部出現了行遷移。
--//順便找1個dba=0x01000223看看.最好退出會話在進入,生成新的跟蹤檔案:
SYS@book> @ &r/dfb16 0x01000223
RFILE# BLOCK# TEXT
---------- ---------- ------------------------------------------------------------
4 547 alter system dump datafile 4 block 547 ;
SYS@book> alter system dump datafile 4 block 547 ;
System altered.
$ sed -n "/Itl/,/bdba:/p" /u01/app/oracle/diag/rdbms/book/book/trace/book_ora_441.trc
Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x000a.001.00004ccc 0x00c036f0.0ef8.09 ---- 134 fsc 0x0000.00000000
0x02 0x0000.000.00000000 0x00000000.0000.00 ---- 0 fsc 0x0000.00000000
0x03 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x04 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x05 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x06 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x07 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x08 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x09 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x0a 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x0b 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x0c 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x0d 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x0e 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x0f 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x10 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x11 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x12 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x13 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x14 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x15 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x16 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x17 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x18 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x19 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x1a 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x1b 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x1c 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x1d 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x1e 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x1f 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x20 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x21 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x22 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x23 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x24 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x25 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x26 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x27 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x28 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x29 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x2a 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x2b 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x2c 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x2d 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x2e 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x2f 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x30 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x31 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x32 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x33 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x34 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x35 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x36 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x37 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x38 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x39 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x3a 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x3b 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
...
0x7c 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x7d 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x7e 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x7f 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x80 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x81 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x82 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x83 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x84 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x85 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x86 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x87 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
0x88 0x0000.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00000000
bdba: 0x01000223
--//你可以發現Flag=C---,也就是已經提交.而xid=0x0000.000.00000000,Uba=0x00000000.0000.00,也就是這些ITL根本沒有事務.
--//共0x88=136槽,減去前面2個,正好134個(LCK=134也說明問題).也就是每次遷移都要建立1個ITL槽.
--//而真正發生事務的ITL是:
Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x000a.001.00004ccc 0x00c036f0.0ef8.09 ---- 134 fsc 0x0000.00000000
SCOTT@book> @ &r/xid
XIDUSN_XIDSLOT_XIDSQN
------------------------------
10.1.19660
C70 XIDUSN XIDSLOT XIDSQN UBAFIL UBABLK UBASQN UBAREC STATUS USED_UBLK USED_UREC XID ADDR START_DATE FLAG
---------------------------------------------------------------------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------------- ---------- ---------- ---------------- ---------------- ------------------- -----
ALTER SYSTEM DUMP UNDO BLOCK '_SYSSMU10_1197734989$' XID 10 1 19660; 10 1 19660 3 14083 3832 23 ACTIVE 31 2200 0A000100CC4C0000 0000000081B92928 2018-04-02 15:39:49 7683
ALTER SYSTEM DUMP UNDO HEADER '_SYSSMU10_1197734989$';
ALTER SYSTEM DUMP DATAFILE 3 BLOCK 14083;
--//19660=0x4ccc.
--//0x0ef8=3832,正好對上.
SYS@book> alter system dump datafile 4 block 550 ;
System altered.
Block header dump: 0x01000226
Object id on Block? Y
seg/obj: 0x1610a csc: 0x03.175e47ea itc: 2 flg: E typ: 1 - DATA
brn: 0 bdba: 0x1000220 ver: 0x01 opc: 0
inc: 0 exflg: 0
Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x000a.01e.00004cc8 0x00c036e1.0ef8.0c C--- 0 scn 0x0003.175e47bc
0x02 0x000a.001.00004ccc 0x00c03703.0ef8.16 ---- 733 fsc 0x0000.00000000
bdba: 0x01000226
SYS@book> @ &r/dfb16 0x00c03703
RFILE# BLOCK# TEXT
------------ ------------ ------------------------------------------------------------
3 14083 alter system dump datafile 3 block 14083 ;
--//生成這些ITL的目的就是當如果遷移行發生後如果有dml事務,就必須在對應行上tx鎖.這樣在當前塊與遷移塊上都必須使用ITL槽,如果該塊包含許多遷移行,
--//在大量dml事務時使用ITL,而行遷移前先建立了ITL槽,就一定程度避免ITL槽的不足.而導致的事務停頓,甚至無法執行的情況.
3.繼續測試:
--//先提交事務:
SCOTT@book> commit ;
Commit complete.
SCOTT@book> update t set pad=lpad('y',20,'y') where id=1;
1 row updated.
--//注意不要提交.
SCOTT@book> @ &r/xid
XIDUSN_XIDSLOT_XIDSQN
------------------------------
10.29.19594
C70 XIDUSN XIDSLOT XIDSQN UBAFIL UBABLK UBASQN UBAREC STATUS USED_UBLK USED_UREC XID ADDR START_DATE FLAG
---------------------------------------------------------------------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------------- ---------- ---------- ---------------- ---------------- ------------------- ----------
ALTER SYSTEM DUMP UNDO BLOCK '_SYSSMU10_1197734989$' XID 10 29 19594; 10 29 19594 3 14123 3832 33 ACTIVE 1 2 0A001D008A4C0000 0000000081B92928 2018-04-02 16:01:40 7683
ALTER SYSTEM DUMP UNDO HEADER '_SYSSMU10_1197734989$';
ALTER SYSTEM DUMP DATAFILE 3 BLOCK 14123;
SYS@book> alter system checkpoint ;
System altered.
SYS@book> alter system checkpoint ;
System altered.
SYS@book> alter system checkpoint ;
System altered.
SYS@book> alter system dump datafile 4 block 550 ;
System altered.
Block header dump: 0x01000226
Object id on Block? Y
seg/obj: 0x1610a csc: 0x03.175e4f72 itc: 2 flg: E typ: 1 - DATA
brn: 0 bdba: 0x1000220 ver: 0x01 opc: 0
inc: 0 exflg: 0
Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x000a.01d.00004c8a 0x00c0372b.0ef8.20 ---- 1 fsc 0x0000.00000000
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0x02 0x000a.001.00004ccc 0x00c03703.0ef8.16 C--- 0 scn 0x0003.175e4dd2
bdba: 0x01000226
--//19594=0x4c8a
block_row_dump:
tab 0, row 0, @0x1f8f
tl: 9 fb: --H----- lb: 0x1 cc: 0
nrid: 0x01000227.1
--//nrid =0x01000227.1
SYS@book> @ &r/dfb16 0x01000227
RFILE# BLOCK# TEXT
------------ ------------ ------------------------------------------------------------
4 551 alter system dump datafile 4 block 551 ;
Block header dump: 0x01000227
Object id on Block? Y
seg/obj: 0x1610a csc: 0x03.175e4f72 itc: 137 flg: E typ: 1 - DATA
brn: 0 bdba: 0x1000220 ver: 0x01 opc: 0
inc: 0 exflg: 0
Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x000a.01e.00004cc8 0x00c036e1.0ef8.0d C--- 0 scn 0x0003.175e47bc
0x02 0x000a.001.00004ccc 0x00c03703.0ef8.17 C--- 0 scn 0x0003.175e4dd2
0x03 0x000a.01d.00004c8a 0x00c0372b.0ef8.21 ---- 1 fsc 0x0000.00000000
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
block_row_dump:
tab 0, row 0, @0x143
tl: 28 fb: --H-FL-- lb: 0x0 cc: 2
col 0: [ 3] c2 08 23
col 1: [20] 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78
tab 0, row 1, @0x12c8
tl: 33 fb: ----FL-- lb: 0x3 cc: 2
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
hrid: 0x01000226.0
col 0: [ 2] c1 02
col 1: [20] 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79
--//可以發現在遷移塊上也佔用一個ITL槽.
--//可以發現在行遷移後在遷移塊中ITL,就是避免以後的事務中ITL槽的不足.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2152498/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [20160726]行連結行遷移與ITL槽.txt
- [20160729]行連結行遷移與ITL槽4.txt
- [20160727]行連結行遷移與ITL槽2.txt
- [20160728]]行連結行遷移與ITL槽3.txt
- 行遷移和行連結
- 【備份恢復】行遷移與行連結
- 清除行遷移和行連結
- Oracle 行遷移 & 行連結的檢測與消除Oracle
- 行遷移_行連結的介紹
- 如何消除行連結和行遷移
- Oracle資料庫中資料行遷移與行連結Oracle資料庫
- 模擬Oracle行遷移和行連結Oracle
- pctused, pctfree, pctincrease , 行遷移 & 行連結
- 行遷移和行連結的檢測
- 排除表中的行連結和行遷移
- 關於行連結和行遷移和消除
- [20180327]行遷移與ITL浪費.txt
- 行連結與行遷移, LOB欄位的儲存及效能影響
- Row Migration and Row Chaining(行遷移和行連結)AI
- [20121116]通過bbed觀察行連結與行遷移.txt
- 【轉載】行遷移和行連結(row chaining or row migration)AI
- 【效能優化】消除行連結和行遷移的思路和方法優化
- 【概念】行連結和行遷移的概念、模擬及甄別
- 【效能最佳化】消除行連結和行遷移的思路和方法
- [20190120]行連結遷移與dml.txt
- Oracle中行遷移和行連結的清除及檢測Oracle
- 海量資料遷移之分割槽並行抽取並行
- 海量資料遷移之分割槽並行切分並行
- 【轉】【效能最佳化】消除行連結和行遷移的思路和方法
- 行連結(Row chaining)和行遷移(Row Migration)的讀書筆記AI筆記
- 簡單瞭解 oracle update 原理(測試)、 行遷移/行連結基本認識Oracle
- 高水位線、行遷移行連結
- 查詢行遷移及消除行遷移(chained rows)AI
- 關於Oracle資料庫中行遷移/行連結的問題Oracle資料庫
- oracle11g_如何模擬產生行連結或行遷移chained_rowsOracleAI
- oracle ITL槽Oracle
- 行遷移測試
- 海量資料遷移之使用分割槽並行切分匯入並行