王純子 等
摘要:針對大型數據處理MS系統中常見的性能問題,總結出一套Oracle數據庫關鍵優化技術,并通過實例說明所提出方案的有效性。
關鍵詞:大型數據處理系統 Oracle數據庫 性能優化
0 引言
本文以實際研發項目為平臺,選取某大型網絡原始數據分析處理系統為研究對象,分析并討論其后臺Oracle數據庫的性能優化技術和方法。該系統隨著處理數據日益增多,常常出現吞吐量低,響應慢,數據庫進程莫名掛死等諸多問題。本文針對這些問題提出一套Oracle數據庫性能優化的思路和方法,并對優化前后的效果進行對比。
1 數據庫性能優化的最佳時機
從以往項目的失敗經驗來看,在系統性能變差時才對系統進行優化已經太晚,相關研究表明,數據庫應用系統的性能問題50%都是在設計階段引入的,因此對數據庫性能最有效的優化階段在設計階段,同時設計階段優化能以最低的代價獲取最大的收益。
2 設計及開發階段的Oracle數據庫優化技術
本文所研究系統規模龐大、架構復雜,需要對當前數據庫進行重新設計。
2.1 調整數據庫結構設計
設計原則如下:
①對數據資源需求非常大且交互頻繁的功能模塊,數據庫設計時使用臨時表,加快統計分析的速度。②對于基本表的設計嚴格遵守第三范式。③根據訪問的頻繁程度對相關表進行分割處理、存儲冗余數據、存儲衍生列、合并相關表處理等。
2.2 調整磁盤I/O
為了實現硬盤之間I/O負載均衡,減少磁盤競爭和I/O爭用,應遵循如下基本原則和方法:
①訪問量大的數據文件放到獨立磁盤。②同一個表空間的多個數據文件放到不同磁盤。③為索引創建單獨表空間,并將表和索引分開在不同的表空間。④創造用戶表空間,與系統表空間分開磁盤存放;⑤創建回滾段專用的表空間。⑥創建臨時表空間用于排序操作。⑦Oracle文件和操作系統文件盡可能放到不同磁盤上。⑧最好使用廉價磁盤冗余陣列。
2.3 調整和有效利用SGA
正確設置SGA大小,在當前項目中,將數據緩沖區從優化前的224M增加到340M,將共享池從優化前的400M增加到450M,將日志緩沖區從優化前的100M增加到150M,并在PGA的排序區或臨時表空間的臨時段中進行排序操作。
2.4 恰當使用分區
Oracle中恰當的使用分區技術,可以將數據在物理上分隔開,不同分區的數據可以指定保存在處于不同磁盤上的數據文件里,可縮短查詢時間,均衡I/O。在當前項目中,對4*146G的硬盤進行分區,共分為16個分區,各數據表的分區指定保存在不同的磁盤下。
2.5 索引的優化和設計
建立索引根本目的是提高查詢效率,開發人員應遵守以下原則應用索引:
①選擇在where子句中常用的查詢列做索引字段。②選擇常用來關聯表的字段做索引字段。③對普通的B-Tree索引,以選擇性高的字段做索引字段。④不要在經常被刪除的字段上建立索引。⑤考慮建立位映射索引。⑥對where子句中函數參數的字段,建函數索引。⑦避免在索引列上進行計算。
2.6 SQL語句的優化
為提升數據庫性能,在SQL優化時應嚴格遵循如下原則:
①盡量避免對全表掃描;②如果多個表經常被查詢,盡可能使其放在同一數據塊中;③使用Decode減少掃描;④使用TRUNCATA替代DELETE,用EXISTS替代IN;⑤用表連接替換EXISTS;⑥在GROUP BY前濾掉不需要的記錄;⑦不要在應用中做數據校驗,使用數據庫的約束;⑧可過濾掉的記錄條件都寫在WHERE子句的末尾;⑨使用ORDER BY和GROUP BY短語;⑩慎用游標;使用快照和顯形圖等分布式數據庫對象減少對數據庫的查詢次數;用where子句代替having子句。
3 實例優化
在“HP 580G7服務器+Oralce 10g數據庫+應用
程序”的環境中,以單日導入50G數據的應用場景來對比驗證,軟件性能優化前后指標對比如下表所示,該結果證明上述Oracle數據庫優化技術的有效性。
參考文獻:
[1]Gaja Krishna Vaidyanatha.Oracle性能優化技術內幕[M].機械工業出版社,2002,5:284.
[2]Robert G.Freeman.Oracle DBA 必備技能詳解[M].商云飛,譯.北京:清華大學出版社,2006.
[3]張舒.超大型Oracle數據庫的基礎設計和優化設計[J].價值工程,2011(10).
基金項目:
陜西省教育廳科學研究計劃專項基金(No.2013JK0189);西安工程大學教育教學改革項目(No.2012JG25)。
作者簡介:
王純子(1983-),女,陜西西安人,講師,博士,主要研究方向:復雜系統建模、優化決策與控制。