Oracle優化經典文章--磁盤I/O和碎片篇
2024-08-29 13:39:27
供稿:網友
不平衡的磁盤I/O和撤消會妨礙性能。這里討論如何正確定位和配置一些與Oracle數據庫相關的物理數據文件。 主要討論以下內容: [1] 使用磁盤陣列 選擇合理的RAID方式。 [2] 在可用的硬盤之間分布要害數據文件 要非凡注重的文件:system表空間、TEMPORARY表空間、回滾段或UNDO表空間、聯機重做日志文件(最好放在最快的磁盤上)、放在ORACLE_HOME文件夾下的要害Oracle文件、經常被訪問的表的數據文件、經常被訪問的索引的數據文件 經驗總結: 把上面提到的數據文件分布在各個可用的磁盤上把數據文件和索引文件分開放置對于經常連接的表,把他們的數據和索引表空間分開把控制文件的多個備份存儲到不同的磁盤和控制器上 避免I/O磁盤爭用,用下面的查詢確定文件的I/O問題select name,phyrds,phywrts,readtim,writetimfrom 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,stautsfrom v$rollname a,v$rollstat bwhere 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