[20160728]]行链接行迁移与ITL槽3.txt

[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/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/267265/viewspace-2122700/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值