實驗:行遷移與分析語句 row migration and analyze statements

zecaro發表於2010-11-30

步驟:

1 建立儲存chained_row資訊的表

2 建立一個將要發生row migration 的表

3 更新表,使其發生row migration,透過analyze語句檢視。

 

環境:

所用資料庫 block_size=8192  PCTFREE=10

根據block_size,PCTFREE的不同發生行遷移的條件會不同

oracle 10.2.0.5.0

Red Hat Enterprise Linux Server release 5.4 (Tikanga)

x86_64

 

具體過程:

1 建立儲存chained_row資訊的表

@?/rdbms/admin/utlchain.sql   
--或  
@?/rdbms/admin/utlchn1.sql   


  
--其中,utlchain.sql 如下  
create table CHAINED_ROWS (  
  owner_name         varchar2(30),  
  table_name         varchar2(30),  
  cluster_name       varchar2(30),  
  partition_name     varchar2(30),  
  subpartition_name  varchar2(30),  
  head_rowid         rowid,  
  analyze_timestamp  date  
); 

utlchain.sql和utlchn1.sql 的區別在於  head_rowid 欄位utlchain.sql為rowid,utlchn1.sql 為urowid

兩者的區別 http://hi.baidu.com/bystander1983/blog/item/727e2b12658f8b085aaf53a4.html

2 建立一個用於發生row migration 的表,插入資料

> drop table t;  
 
Table dropped.  
 
> create table t  
  2  ( a int,b varchar2(4000))  
  3  /  
 
Table created.  
 
 
> insert into t (a) values (1);  
 
1 row created.  
 
> insert into t (a) values (2);  
 
1 row created.  
 
> insert into t (a) values (3);  
 
1 row created.  
 
> insert into t (a) values (4);  
 
1 row created.  
 
> commit;  
 
Commit complete. 

3 更新表,使其發生row migration。

> update t set b=rpad('*',4000,'*') where a=1;   
1 row updated.  
 
 
> update t set b=rpad('*',4000,'*') where a=2;  
1 row updated.  
 
--由於block_size=8192,此時 a=3 的行發生行遷移  
> update t set b=rpad('*',4000,'*') where a=3;  
1 row updated.  
 
> commit;  
Commit complete.  

透過analyze語句檢視
 
> ANALYZE TABLE t  LIST CHAINED ROWS INTO CHAINED_ROWS;  
Table analyzed.  
 
> select * from CHAINED_ROWS;  
OWNER_NAME TABLE_NAME CLUSTER_NA PARTITION_ SUBPARTITI HEAD_ROWID         ANALYZE_T  
---------- ---------- ---------- ---------- ---------- ------------------ ---------   
z   T                                N/A        AAADT1AABAAAGEKAAC 30-NOV-10  
 
> select rowid,a from t;  
ROWID                       A  
------------------ ----------  
AAADT1AABAAAGEKAAA          1  
AAADT1AABAAAGEKAAB          2  
AAADT1AABAAAGEKAAD          4  
AAADT1AABAAAGEKAAC          3   

此時再更新 a=4 的行,發生行遷移  
>  update t set b=rpad('*',4000,'*') where a=4;  
1 row updated.  
 
>  commit;,  
Commit complete.  
 
>  ANALYZE TABLE t  LIST CHAINED ROWS INTO CHAINED_ROWS;  
Table analyzed.  
 
> select * from CHAINED_ROWS;  
OWNER_NAME TABLE_NAME CLUSTER_NA PARTITION_ SUBPARTITI HEAD_ROWID         ANALYZE_T  
---------- ---------- ---------- ---------- ---------- ------------------ ---------   
z   T                                N/A        AAADT1AABAAAGEKAAC 30-NOV-10   
z   T                                N/A        AAADT1AABAAAGEKAAC 30-NOV-10  
z   T                                N/A        AAADT1AABAAAGEKAAD 30-NOV-10 

記於 2010年11月30日    

 

    

 

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

相關文章