Oracle優化經典文章------磁碟I/O和碎片篇

tolywang發表於2008-06-03
不平衡的磁碟I/O和撤消會妨礙效能。這裡討論如何正確定位和配置一些與Oracle資料庫相關的物理資料檔案。主要討論以下內容:

[1] 使用磁碟陣列
選擇合理的RAID方式。
[@more@]


[2] 在可用的硬碟之間分佈關鍵資料檔案
要特別注意的檔案:system表空間、TEMPORARY表空間、回滾段或UNDO表空間、聯機重做日誌檔案(最好放在最快的磁碟上)、放在ORACLE_HOME資料夾下的關鍵Oracle檔案、經常被訪問的表的資料檔案、經常被訪問的索引的資料檔案

經驗總結:把上面提到的資料檔案分佈在各個可用的磁碟上
把資料檔案和索引檔案分開放置
對於經常連線的表,把他們的資料和索引表空間分開
把控制檔案的多個備份儲存到不同的磁碟和控制器上

避免I/O磁碟爭用,用下面的查詢確定檔案的I/O問題
select name,phyrds,phywrts,readtim,writetim
from v$filestat a,v$dbfile b
where a.file# = b.file#
order by readtim desc
說明:在磁碟上的物理寫入和讀取次數上如果出現很大的差別,就表明肯定有哪個磁碟負載過多!
如果出現磁碟負載不平衡,可以通過移動資料檔案來均衡檔案I/O
alter tablespace tablespace_name offline;
$cp /disk1/a.dbf /disk2/a.dbf;
alter tablespace tablespace_name rename datafile '/disk1/a.dbf' to '/disk2/a.dbf';
alter tablespace tablespace online;
$rm /disk1/a.dbf

[3] 使用本地託管的表空間

[4] 在大型表上使用表分割槽

[5] 使用索引分割槽
索引分割槽與分割槽表擁有同樣的優點。如果正確執行,則通過訪問索引的小片段而不是整個表上的索引可以提高效能。

[6] 瞭解碎片的概念以及如何消除碎片
經驗總結:使用本地託管的統一擴充套件表空間
在字典託管的表空間中使用統一的擴充套件大小(除了SYSTEM表空間外)
使擴充套件尺寸是資料庫塊尺寸的倍數
不要在字典託管的表空間上設定除0以外的任何PCTINCRREASE值
把表放在有合適擴充套件大小的表空間中
正確設定PCTINCREASE
避免使用跨越多個不連續的資料檔案的點陣圖索引

[7] 使用撤消管理
如果想使大量的INSERT、UPDATE、DELETE操作速度更快,可以增大日誌檔案大小(可以增加用於介質恢復的時間),並確保這些檔案在最快的磁碟上。

[8] 使用回滾段
下面查詢顯示回滾資訊:
select a.name,b.extents,b.rssize,b.xacts,b.waits,b.gets,optsize,stauts
from v$rollname a,v$rollstat b
where a.usn = b.usn;
說明:如果xacts(活動事務)經常超出1,就需要增加回滾段的數目,以避免可能出現的爭用。
把大的事務隔離到它們自己的回滾段上,用下面的語句:
commit;
set transation use rollback segment roll_segment_name;
delete from big_table;
commit;

[9] 使用更簡單的方法:undo表空間
Oracle 9i新引入的功能。

[10]通過記憶體排序來減少磁碟I/O

[11]在不同的磁碟和控制器上存放多個控制檔案

[12]使用裸裝置改善有寫操作頻繁的資料的I/O

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

相關文章