【效能最佳化】消除行連結和行遷移的思路和方法

liuhaimiao發表於2017-02-15
關於行連結和行遷移的概念請參考文章《【概念】行連結和行遷移的概念、模擬及甄別》
(http://space.itpub.net/519536/viewspace-624408)。


眾所周知,行連結和行遷移會導致系統的查詢效率降低,因為在這種情況下查詢需要掃描更多的資料塊才能得到所需的資訊。本文嘗試給出消除行連結和行遷移的思路和方法。

1.消除行連結和行遷移思路
1)針對發生行連結和行遷移的資料行進行重新整理;

2)將資料遷移到大尺寸資料塊表空間中存放。

2.消除行連結和行遷移方法
假設T表出現行連結、行遷移問題。

1)針對發生行連結和行遷移的資料行進行重新整理的方法
(1)使用CTAS(Create Table As Select)方法將出現行連結和行遷移的資料彙總在表T_Temp中。具體命令參考如下:
SQL> create table T_Temp as select * from T where rowid in (select head_rowid from chained_rows where table_name='T');

(2)刪除T表中發生行連結行遷移的資料
SQL> delete from T where rowid in (select head_rowid from chained_rows where table_name='T');

(3)將表T_Temp中存放的資料插回到T表
SQL> insert into T select * from T_Temp;

(4)刪除表T_Temp
SQL> drop table T_Temp purge;

透過這麼一系列的維護,行連結和行遷移現象將會明顯減少或消失(如果不存在一個資料塊存放不下一行資料的情況)。

2)將資料遷移到大尺寸資料塊表空間中存放
如果存在一個資料塊存放不下一行資料的情況,我們需要透過建立大尺寸資料塊表空間,然後將表移動到新表空間上存放的方法來解決。
(1)建立大尺寸資料塊表空間
有關大尺寸資料塊表空間的建立請參見文章《【TABLESPACE】建立非標準塊大小(標準塊8K)表空間》(http://space.itpub.net/519536/viewspace-668281)
SQL> create tablespace TBS_16K datafile '/u01/app/oracle/oradata/ora10g/DATA01_01.dbf' size 256M uniform. size 4M blocksize 16K;

(2)將表T移動到新建的表空間上
SQL> alter table T move TBS_16K;

3.小結
在OLTP系統中出現行連結和行遷移的可能性比較高,我們可以使用文中介紹的方法定期對這些資料進行調整,防止系統出現效能問題。

Good luck.

secooler
11.04.28

-- The End --

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

相關文章