[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现状就是如此,都在做表面文章。