在公路建設中通過建立多條車道可以提高道路的流量其實這個道理在Oracle數據庫中也行得通即可以將關鍵數據文件存儲在多塊硬盤上以提高Oracle數據庫的性能可惜的是不少數據庫管理員沒有意識到這一點在這篇文章中筆者就以OracleG為例說明如何通過在硬盤之間分布關鍵數據文件來提高性能
一在硬盤之間分布關鍵數據文件的基本原則
在傳統的文件系統上(即不是在裸機上)部署Oracle數據庫可以通過將關鍵的數據文件分布到多個可用的文件系統上或者不同的硬盤上來提高數據庫的性能具體的來說需要遵循如下幾個原則
一是對於表來說往往包含兩個部分即基本表與索引表只要為基本表中的字段創建了索引其對應的就有一張索引表當用戶訪問表中的數據時應用系統需要同時訪問到索引表與數據表此時我們可以將這兩張表比喻成兩輛車如果現在只有一個車道(即將他們同時存放在一個硬盤或者文件系統中)那麼兩輛車必須前後行使而如果現在有兩個車道(即將基本表與其相對應的索引表存放在不同的硬盤或者文件系統中)那麼這兩輛車就可以並排行使顯然後者的效率更高為此筆者建議可將經常需要訪問的表和與之對應的索引表分開來存放
二是可以將日志文件也分開來存放不光光是數據表與索引表存在著這種狀況其實在日志文件管理中也是如此只要條件允許那麼最好能夠將聯機重做日志和歸檔日志與其它數據文件存放在不同的硬盤或者文件系統上因為當用戶往數據庫中寫入數據時需要同時往數據文件與重做日志文件中寫入數據此時如果將它們分開來存放那麼就相當於有了多條車道分別往不同的文件中寫入數據這無疑就可以提高數據寫入的效率從而提高數據庫的性能
二哪些文件最好能夠分開存放?
在講到硬盤之間分布關鍵數據文件的基本原則的時候筆者舉了幾個需要分開存放的幾個案例但是在實際工作中並不僅僅局限於上面提到的這些文件筆者認為如果條件允許的話那麼可以考慮將如下文件放置在不同的硬盤上
一是表空間如臨時表空間系統表空間UNDO表空間等等這三個表空間可能系統會同時進行訪問為此需要將其分開來存放二是數據文件和索引文件上面提到過需要將經常訪問的數據文件與其對應的索引文件存放在不同的硬盤上因為這兩類文件在訪問數據時也可能會同時訪問到三是操作系統盤與數據庫文件單獨存放顯然Oracle系統肯定是與操作系統同時運行的為了避免他們之間的I/Q沖突就需要將Oracle部署在操作系統盤以外的磁盤上四是聯機重做日志文件這個文件比較復雜不但要將其與其他文件分開來存放而且還需要注意的是最好能夠將其存放在性能最佳的硬盤上
最後需要說明的一點是增加磁盤也會增加成本這不光光是購買磁盤所需要的花費還包括管理的成本所以這之間也會涉及到成本與性能之間的一個均衡問題如果企業的數據不是很多或者主要是涉及到查詢操作那麼這麼設計的話就可能不怎麼合理因為投入要大於回報
三如何確定是否需要將文件分開來存放?
在實際工作中企業的數據是一個從少到多的過程也就是說剛開始使用數據庫的時候可能數據量比較少此時出於成本的考慮沒有將相關文件存放在不同的磁盤上但是隨著工作的深入用戶會發現數據庫的性能在逐漸的降低此時管理員就需要考慮能夠采取這種多建車道的措施來提高數據庫性能當然在采取這個措施之前管理員需要先進性評估此時評估所需要用到的一個指標就是磁盤的I/O爭用
磁盤爭用通常發生在有多個進程試圖同時訪問一個物理磁盤的情況下如現在用戶需要訪問某個數據表中的數據此時系統需要訪問索引文件與數據表文件如果將它們放置在同一磁盤上那麼在訪問時就會發生I/O沖突所以評估I/O沖突的嚴重程度可以幫我們來確定是否需要將關鍵文件存放在不同的磁盤上
將I/O平均的分布到多個可用的磁盤上這可以有效的減少磁盤之間的爭用情況提高數據存儲與讀取的性能從而提高Oracle等應用程序的效率在實際工作中數據庫控制文件中有兩個參數可以用來幫助我們評估這個指標這兩個參數是文件平均讀取時間和文件平均寫入時間不過在使用這兩個參數的時候其只評估所有與數據庫相關聯的文件管理員如果有需要的話也可以通過下面的查詢語句來查詢數據文件是否存在I/O問題查詢的語法與結果如下圖所示
從如上的查詢結果中可以看出某個數據文件是否繁忙數據文件之間是否存在著/I/O沖突文件這裡需要注意的是這個結果是一個動態的結果在不同的時刻用戶進行不同的操作時往往會得出不同的結論為此筆者建議在使用這個數據的時候最好能夠多跟蹤幾次然後分析多次運行的結果只有如此才能夠得到比較合乎情理的判斷
通常情況下管理員根據上面的結果可以得出三種結論
第一種結論是上面這些數據文件都不是很忙即文件的平均讀取時間與寫入時間都比較短表示這兩個文件都是比較空閒的此時正常情況下數據庫的性能應該是不錯的也就是說如果此時數據庫的性能不理想的話那麼就不是磁盤的I/O所造成的管理員應該從其他角度來改善數據庫的性能
第二種結論是每個數據庫文件都非常的繁忙此時有可能是讀取時間或者寫入時間比較長或者說兩個時間都比較長當多個數據文件同時比較繁忙並且他們處於同一磁盤的話那麼管理員就需要考慮購買新的磁盤然後將上面提到的這些關鍵文件重新整理讓他們部署在不同的磁盤上
第三種結論是某幾個特定的數據文件比較繁忙而其他數據文件還可以此時管理員如果成本受到限制那麼也不需要重新購買硬盤在磁盤上的物理寫入和讀取次數上如果出現比較大的差異就表明某個磁盤負載過大即有很嚴重的I/O沖突此時最好能夠將這個磁盤中的文件進行調整如將某些文件移動到另外的一塊I/O相對不怎麼嚴重的磁盤上不過在采取這個操作的時候需要注意一點對於聯機重做日志文件來說即使其所在的磁盤I/O沖突比較低或者訪問這個文件的時間比較短但是也不建議將其他數據文件轉移到其所在的磁盤上來因為通常情況下為了保障數據庫的性能我們都建議將聯機重做日志文件單獨存放並且還需要講起放置在性能比較高的硬盤上
總之將關鍵的Oracle數據庫文件分開放置如此的話可以有效避免磁盤爭用成為Oracle數據庫系統的性能瓶頸
From:http://tw.wingwit.com/Article/program/Oracle/201311/18561.html