[20180402]行連結行遷移與ITL槽6.txt

lfree發表於2018-04-02

[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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章