[20160728]]行連結行遷移與ITL槽3.txt

lfree發表於2016-07-28

[20160728]]行連結行遷移與ITL槽3.txt

--上午測試了行連結行遷移與ITL槽的關係,連結如下:
[20160727]行連結行遷移與ITL槽2.txt => http://blog.itpub.net/267265/viewspace-2122663/

--如果仔細看前面的測試可以發現當出現行連結或者行遷移時,除了增加1個空itl槽像如下:
0x05   0x0000.000.00000000  0x00000000.0000.00  C---    0  scn 0x0000.00000000

--並不重用原來的ITL槽,這樣導致每次插入都增加1個ITL槽,並使用它。你可以發現前面9個ITL槽.

Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   0x000a.004.0000d0c9  0x00c0024a.29fd.23  C---    0  scn 0x0003.15762d70
0x02   0x000a.017.0000d0b7  0x00c00240.29fd.1c  C---    0  scn 0x0003.15762dfb
0x03   0x000a.00d.0000d0be  0x00c00240.29fd.25  C---    0  scn 0x0003.15762e02
0x04   0x000a.006.0000d0c6  0x00c00240.29fd.2e  C---    0  scn 0x0003.15762e09
0x05   0x000a.014.0000d0c3  0x00c00240.29fd.35  C---    0  scn 0x0003.15762e10
0x06   0x000a.00f.0000d0b8  0x00c00240.29fd.3c  C---    0  scn 0x0003.15762e17
0x07   0x000a.00c.0000d0b8  0x00c00240.29fd.43  C---    0  scn 0x0003.15762e1e
0x08   0x000a.00a.0000d0d3  0x00c0024a.29fd.2c  C---    0  scn 0x0003.15762e25
0x09   0x0001.00e.00000f91  0x00c0049a.0817.0f  C---    0  scn 0x0003.15762e2c
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
bdba: 0x010002ee

--現在繼續測試:

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

SCOTT@book> create table empx as select * from emp where 1=2;
Table created.

--在1個會話裡執行如下:
Insert into empx (EMPNO) Values (7369);
commit;
Insert into empx (EMPNO) Values (7499);
commit;
Insert into empx (EMPNO) Values (7521);
commit;
Insert into empx (EMPNO) Values (7566);
commit;
Insert into empx (EMPNO) Values (7654);
commit;
Insert into empx (EMPNO) Values (7698);
commit;
Insert into empx (EMPNO) Values (7782);
commit;
Insert into empx (EMPNO) Values (7788);
commit;
Insert into empx (EMPNO) Values (7839);
commit;
Insert into empx (EMPNO) Values (7844);
commit;
Insert into empx (EMPNO) Values (7876);
commit;
Insert into empx (EMPNO) Values (7900);
commit;
Insert into empx (EMPNO) Values (7902);
commit;
Insert into empx (EMPNO) Values (7934);
commit;

SCOTT@book> select rowid,empno from empx where rownum=1;
ROWID                     EMPNO
------------------ ------------
AAAXU/AAEAAAAI2AAA         7369

SCOTT@book> @ &r/rowid AAAXU/AAEAAAAI2AAA
      OBJECT         FILE        BLOCK          ROW DBA                  TEXT
------------ ------------ ------------ ------------ -------------------- ----------------------------------------
       95551            4          566            0 4,566                alter system dump datafile 4 block 566 ;

SCOTT@book> alter system checkpoint ;
System altered.

SCOTT@book> alter system dump datafile 4 block 566 ;
System altered.

--//檢查轉儲:
Block header dump:  0x01000236
Object id on Block? Y
seg/obj: 0x1753f  csc: 0x03.15767520  itc: 2  flg: E  typ: 1 - DATA
     brn: 0  bdba: 0x1000230 ver: 0x01 opc: 0
     inc: 0  exflg: 0

Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   0x000a.018.0000d119  0x00c0013b.2a08.2d  --U-    1  fsc 0x0000.15767521
0x02   0x000a.00d.0000d10f  0x00c0013b.2a08.2e  --U-    1  fsc 0x0000.15767523
bdba: 0x01000236

--你可以發現僅僅存在2個ITL槽。也就是如果事務提交,會話會重用ITL槽。

2.繼續回到原來的測試:

--// drop table t purge;
spool a.sql
select 'create table t (' from dual
union all
select 'col'||lpad(rownum-1,3,'0')||' number(2),' from dual connect by level<=1000
union all
select 'constraint t1_pk primary key (col000));' from dual ;
spool off

SCOTT@book> alter table t pctfree 0;
Table altered.

insert into t (col000,col766) values (1,1);
commit ;

SCOTT@book> select rowid,t.col000 from t ;

ROWID                  COL000
------------------ ----------
AAAXVAAAEAAAALuAAD          1

SCOTT@book> @ &r/rowid AAAXVAAAEAAAALuAAD
    OBJECT       FILE      BLOCK        ROW DBA                  TEXT
---------- ---------- ---------- ---------- -------------------- ----------------------------------------
     95552          4        750          3 4,750                alter system dump datafile 4 block 750 ;

3.插入一些資料看看ITL變化情況。

alter system dump datafile 4 block 750 ;

insert into t (col000,col255) values (2,2);
commit ;
alter system checkpoint ;
alter system dump datafile 4 block 750 ;
--//出現1次行內連結

insert into t (col000) values (3);
commit ;
alter system checkpoint ;
alter system dump datafile 4 block 750 ;

insert into t (col000) values (4);
commit ;
alter system checkpoint ;
alter system dump datafile 4 block 750 ;

insert into t (col000) values (5);
commit ;
alter system checkpoint ;
alter system dump datafile 4 block 750 ;

insert into t (col000) values (6);
commit ;
alter system checkpoint ;
alter system dump datafile 4 block 750 ;
--//後面這些操作不會出現行內遷移,就就是分片。

$ sed -n '/Itl/,/bdba:/p' /u01/app/oracle/diag/rdbms/book/book/trace/book_ora_64063.trc
Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   0x0003.018.000010bc  0x00c0009b.0c82.1a  --U-    4  fsc 0x0000.1576762d
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
bdba: 0x010002ee
Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   0x0003.018.000010bc  0x00c0009b.0c82.1a  --U-    4  fsc 0x0000.1576762d
0x02   0x000a.01c.0000d0de  0x00c00300.2a09.03  --U-    2  fsc 0x0000.15767778
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
bdba: 0x010002ee
Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   0x0003.018.000010bc  0x00c0009b.0c82.1a  --U-    4  fsc 0x0000.1576762d
0x02   0x000a.01c.0000d0de  0x00c00300.2a09.03  --U-    2  fsc 0x0000.15767778
0x03   0x000a.011.0000d113  0x00c00300.2a09.09  --U-    1  fsc 0x0000.1576777f
0x04   0x0000.000.00000000  0x00000000.0000.00  C---    0  scn 0x0000.00000000
0x05   0x0000.000.00000000  0x00000000.0000.00  C---    0  scn 0x0000.00000000
bdba: 0x010002ee
Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   0x0003.018.000010bc  0x00c0009b.0c82.1a  --U-    4  fsc 0x0000.1576762d
0x02   0x000a.01c.0000d0de  0x00c00300.2a09.03  --U-    2  fsc 0x0000.15767778
0x03   0x000a.011.0000d113  0x00c00300.2a09.09  --U-    1  fsc 0x0000.1576777f
0x04   0x0007.00a.0000189a  0x00c004ff.0622.09  --U-    1  fsc 0x0000.15767786
0x05   0x0000.000.00000000  0x00000000.0000.00  C---    0  scn 0x0000.00000000
bdba: 0x010002ee
Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   0x0003.018.000010bc  0x00c0009b.0c82.1a  --U-    4  fsc 0x0000.1576762d
0x02   0x000a.01c.0000d0de  0x00c00300.2a09.03  --U-    2  fsc 0x0000.15767778
0x03   0x000a.011.0000d113  0x00c00300.2a09.09  --U-    1  fsc 0x0000.1576777f
0x04   0x0007.00a.0000189a  0x00c004ff.0622.09  --U-    1  fsc 0x0000.15767786
0x05   0x000a.010.0000d10b  0x00c00300.2a09.11  --U-    1  fsc 0x0000.1576778d
bdba: 0x010002ee
Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   0x000a.002.0000d116  0x00c00300.2a09.15  --U-    1  fsc 0x0000.15767794
0x02   0x000a.01c.0000d0de  0x00c00300.2a09.03  C---    0  scn 0x0003.15767778
0x03   0x000a.011.0000d113  0x00c00300.2a09.09  C---    0  scn 0x0003.1576777f
0x04   0x0007.00a.0000189a  0x00c004ff.0622.09  C---    0  scn 0x0003.15767786
0x05   0x000a.010.0000d10b  0x00c00300.2a09.11  C---    0  scn 0x0003.1576778d
bdba: 0x010002ee

--可以發現佔用5個ITL槽。

4.繼續插入呢?

insert into t (col000,col766) values (7,7);
commit ;
alter system checkpoint ;
alter system dump datafile 4 block 750 ;

insert into t (col000,col766) values (8,8);
commit ;
alter system checkpoint ;
alter system dump datafile 4 block 750 ;

insert into t (col000,col766) values (9,9);
commit ;
alter system checkpoint ;
alter system dump datafile 4 block 750 ;

insert into t (col000,col766) values (10,10);
commit ;
alter system checkpoint ;
alter system dump datafile 4 block 750 ;

insert into t (col000,col766) values (11,11);
commit ;
alter system checkpoint ;
alter system dump datafile 4 block 750 ;

$ sed -n '/Itl/,/bdba:/p' /u01/app/oracle/diag/rdbms/book/book/trace/book_ora_64063.trc
...

Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   0x000a.002.0000d116  0x00c00300.2a09.15  --U-    1  fsc 0x0000.15767794
0x02   0x000a.017.0000d10a  0x00c00300.2a09.1e  --U-    4  fsc 0x0000.157677d5
0x03   0x000a.011.0000d113  0x00c00300.2a09.09  C---    0  scn 0x0003.1576777f
0x04   0x0007.00a.0000189a  0x00c004ff.0622.09  C---    0  scn 0x0003.15767786
0x05   0x000a.010.0000d10b  0x00c00300.2a09.11  C---    0  scn 0x0003.1576778d
0x06   0x0000.000.00000000  0x00000000.0000.00  C---    0  scn 0x0000.00000000
bdba: 0x010002ee
Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   0x000a.002.0000d116  0x00c00300.2a09.15  --U-    1  fsc 0x0000.15767794
0x02   0x000a.017.0000d10a  0x00c00300.2a09.1e  --U-    4  fsc 0x0000.157677d5
0x03   0x000a.011.0000d113  0x00c00300.2a09.09  C---    0  scn 0x0003.1576777f
0x04   0x0007.00a.0000189a  0x00c004ff.0622.09  C---    0  scn 0x0003.15767786
0x05   0x000a.010.0000d10b  0x00c00300.2a09.11  C---    0  scn 0x0003.1576778d
0x06   0x000a.019.0000d113  0x00c00300.2a09.25  --U-    4  fsc 0x0000.157677dc
0x07   0x0000.000.00000000  0x00000000.0000.00  C---    0  scn 0x0000.00000000
bdba: 0x010002ee
Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   0x000a.002.0000d116  0x00c00300.2a09.15  --U-    1  fsc 0x0000.15767794
0x02   0x000a.017.0000d10a  0x00c00300.2a09.1e  --U-    4  fsc 0x0000.157677d5
0x03   0x000a.011.0000d113  0x00c00300.2a09.09  C---    0  scn 0x0003.1576777f
0x04   0x0007.00a.0000189a  0x00c004ff.0622.09  C---    0  scn 0x0003.15767786
0x05   0x000a.010.0000d10b  0x00c00300.2a09.11  C---    0  scn 0x0003.1576778d
0x06   0x000a.019.0000d113  0x00c00300.2a09.25  --U-    4  fsc 0x0000.157677dc
0x07   0x000a.000.0000d114  0x00c00300.2a09.2c  --U-    4  fsc 0x0000.157677e3
0x08   0x0000.000.00000000  0x00000000.0000.00  C---    0  scn 0x0000.00000000
bdba: 0x010002ee
Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   0x000a.002.0000d116  0x00c00300.2a09.15  --U-    1  fsc 0x0000.15767794
0x02   0x000a.017.0000d10a  0x00c00300.2a09.1e  --U-    4  fsc 0x0000.157677d5
0x03   0x000a.011.0000d113  0x00c00300.2a09.09  C---    0  scn 0x0003.1576777f
0x04   0x0007.00a.0000189a  0x00c004ff.0622.09  C---    0  scn 0x0003.15767786
0x05   0x000a.010.0000d10b  0x00c00300.2a09.11  C---    0  scn 0x0003.1576778d
0x06   0x000a.019.0000d113  0x00c00300.2a09.25  --U-    4  fsc 0x0000.157677dc
0x07   0x000a.000.0000d114  0x00c00300.2a09.2c  --U-    4  fsc 0x0000.157677e3
0x08   0x0008.014.00002606  0x00c016b2.0a72.19  --U-    4  fsc 0x0000.157677ea
0x09   0x0000.000.00000000  0x00000000.0000.00  C---    0  scn 0x0000.00000000
bdba: 0x010002ee

Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   0x000a.002.0000d116  0x00c00300.2a09.15  --U-    1  fsc 0x0000.15767794
0x02   0x000a.017.0000d10a  0x00c00300.2a09.1e  --U-    4  fsc 0x0000.157677d5
0x03   0x000a.011.0000d113  0x00c00300.2a09.09  C---    0  scn 0x0003.1576777f
0x04   0x0007.00a.0000189a  0x00c004ff.0622.09  C---    0  scn 0x0003.15767786
0x05   0x000a.010.0000d10b  0x00c00300.2a09.11  C---    0  scn 0x0003.1576778d
0x06   0x000a.019.0000d113  0x00c00300.2a09.25  --U-    4  fsc 0x0000.157677dc
0x07   0x000a.000.0000d114  0x00c00300.2a09.2c  --U-    4  fsc 0x0000.157677e3
0x08   0x0008.014.00002606  0x00c016b2.0a72.19  --U-    4  fsc 0x0000.157677ea
0x09   0x0006.013.0000121a  0x00c0119c.0901.1b  --U-    4  fsc 0x0000.1576786a
0x0a   0x0000.000.00000000  0x00000000.0000.00  C---    0  scn 0x0000.00000000
bdba: 0x010002ee

--//從以上測試還可以發現1個規律,就是如果出現行連結至少會增加1個空槽,只要空間允許。
0x0a   0x0000.000.00000000  0x00000000.0000.00  C---    0  scn 0x0000.00000000

--但是始終儲存FLAG=C---的最多4個。以上測試不是很嚴謹,至少說明在出現行連結或者行遷移時,ITL槽數量會增加。
--這種情況特性容易出現在插入時行記錄很短,更新以後行記錄很大出現遷移,這樣在遷移的塊就會出現大量的itl槽,因為沒出現1次行連結
--ITL槽的數量就增加1次(特殊情況會增加3個,比如分成4個row piece)。造成空間利用率下降。

--你可以繼續插入:

insert into t (col000,col766) values (12,12);
commit ;
alter system checkpoint ;
alter system dump datafile 4 block 750 ;

$ sed -n '/Itl/,/bdba:/p' /u01/app/oracle/diag/rdbms/book/book/trace/book_ora_64063.trc
...
 
Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   0x000a.002.0000d116  0x00c00300.2a09.15  --U-    1  fsc 0x0000.15767794
0x02   0x000a.017.0000d10a  0x00c00300.2a09.1e  --U-    4  fsc 0x0000.157677d5
0x03   0x000a.011.0000d113  0x00c00300.2a09.09  C---    0  scn 0x0003.1576777f
0x04   0x0007.00a.0000189a  0x00c004ff.0622.09  C---    0  scn 0x0003.15767786
0x05   0x000a.010.0000d10b  0x00c00300.2a09.11  C---    0  scn 0x0003.1576778d
0x06   0x000a.019.0000d113  0x00c00300.2a09.25  --U-    4  fsc 0x0000.157677dc
0x07   0x000a.000.0000d114  0x00c00300.2a09.2c  --U-    4  fsc 0x0000.157677e3
0x08   0x0008.014.00002606  0x00c016b2.0a72.19  --U-    4  fsc 0x0000.157677ea
0x09   0x0006.013.0000121a  0x00c0119c.0901.1b  --U-    4  fsc 0x0000.1576786a
0x0a   0x000a.01b.0000d124  0x00c00350.2a09.09  --U-    4  fsc 0x0000.15767bf2
0x0b   0x0000.000.00000000  0x00000000.0000.00  C---    0  scn 0x0000.00000000
bdba: 0x010002ee

insert into t (col000,col766) values (13,13);
commit ;
alter system checkpoint ;
alter system dump datafile 4 block 750 ;

insert into t (col000,col766) values (14,14);
commit ;
alter system checkpoint ;
alter system dump datafile 4 block 750 ;

$ sed -n '/Itl/,/bdba:/p' /u01/app/oracle/diag/rdbms/book/book/trace/book_ora_64063.trc
...

Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   0x000a.002.0000d116  0x00c00300.2a09.15  C---    0  scn 0x0003.15767794
0x02   0x000a.017.0000d10a  0x00c00300.2a09.1e  C---    0  scn 0x0003.157677d5
0x03   0x000a.011.0000d113  0x00c00300.2a09.09  C---    0  scn 0x0003.1576777f
0x04   0x0007.00a.0000189a  0x00c004ff.0622.09  C---    0  scn 0x0003.15767786
0x05   0x000a.010.0000d10b  0x00c00300.2a09.11  C---    0  scn 0x0003.1576778d
0x06   0x000a.019.0000d113  0x00c00300.2a09.25  C---    0  scn 0x0003.157677dc
0x07   0x000a.000.0000d114  0x00c00300.2a09.2c  C---    0  scn 0x0003.157677e3
0x08   0x0008.014.00002606  0x00c016b2.0a72.19  C---    0  scn 0x0003.157677ea
0x09   0x0006.013.0000121a  0x00c0119c.0901.1b  C---    0  scn 0x0003.1576786a
0x0a   0x000a.01b.0000d124  0x00c00350.2a09.09  C---    0  scn 0x0003.15767bf2
0x0b   0x000a.018.0000d123  0x00c00350.2a09.10  C---    0  scn 0x0003.15767c12
0x0c   0x000a.019.0000d11a  0x00c00350.2a09.15  C---    0  scn 0x0003.15767c15
0x0d   0x0000.000.00000000  0x00000000.0000.00  C---    0  scn 0x0000.00000000
bdba: 0x010002ee

--//塊寫滿的時候提交不再是快速提交,但是你可以發現有增加2個itl槽。
--//實際上這也是我生產系統看到的情況,從這個意義講設計資料結構要考慮避免行遷移或者行連結這種因素。
--//^_^!!這我想起以前聽課老師的一句話,如果你看到應用的pctfree都是10,這樣的系統一定沒有dba管理,
--//國內的IT現狀就是如此,都在做表面文章。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2122700/,如需轉載,請註明出處,否則將追究法律責任。

相關文章