[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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [20180327]行遷移與ITL浪費.txt
- Oracle 行遷移 & 行連結的檢測與消除Oracle
- [20190120]行連結遷移與dml.txt
- 模擬Oracle行遷移和行連結Oracle
- Oracle資料庫中資料行遷移與行連結Oracle資料庫
- [20230425]CBO cost與行遷移關係.txt
- MySQL分割槽如何遷移MySql
- 遷移執行緒migration執行緒
- [20180730]exadata與行連結.txt
- 對Oracle分割槽表進行表空間遷移並處理ORA-14511問題Oracle
- 使用Mobilenet和Keras進行遷移學習!Keras遷移學習
- 杉巖資料銀行Documentum遷移方案
- 使用Conda Pack進行環境打包遷移
- 世界銀行報告:全球遷移人口增長10%與缺水有關
- 1.5 使用nvicat和kettle進行全量遷移
- EF Core 小技巧:遷移已經應用到資料庫,如何進行遷移回退操作?資料庫
- 連載一:Oracle遷移文件大全Oracle
- 連載二:Oracle遷移文章大全Oracle
- Kubernetes怎麼進行NFS動態儲存遷移NFS
- Terraform初探:遷移本地專案到Terraform Cloud執行ORMCloud
- 使用dbeaver 用csv 檔案進行資料遷移
- “遷移策略+新容器執行時”應對有狀態應用的冷熱遷移挑戰
- 執行遷移檔案報錯: Syntax error or access violation: 1166 ...Error
- 使用DistCp將Hadoop進行雲遷移時注意事項TCPHadoop
- 鐵威馬NAS如何進行線上陣列遷移陣列
- 資料遷移(1)——通過資料泵表結構批量遷移
- 從 Oracle 到 TiDB,全鏈路資料遷移平臺核心能力和杭州銀行遷移實踐OracleTiDB
- PV 與 PVC 狀態遷移
- Flink執行時之結果分割槽消費端
- 在連結與執行地址不同時gdb的除錯方法除錯
- 執行遷移檔案報錯 1071 Specified key was too long.
- Velero系列文章(四):使用Velero進行生產遷移實戰
- 將ABAP On-Premises系統連線到中央檢查系統以進行自定義程式碼遷移REM
- 【連載 01】併發與並行並行
- mysql 進行表分割槽MySql
- DiskGenius分割槽行動硬碟硬碟
- 單執行緒-非阻塞-長連結執行緒
- GCC 使用庫檔名進行連結GC