摘要:Oracle數據庫作為全球第一大數據庫廠商,在國內外獲得了廣泛應用,本文對Oracle數據庫性能調整和優化進行了簡要分析和研究,對各種優化技術進行了深入的探討,將SQL語句優化、Oracle內存分配調整作為論文的主要研究內容。
關鍵詞:數據庫優化
中圖分類號:TP311文獻標識碼:A文章編號:1674-098X(2011)03(a)-0120-01
隨著數據庫規模的擴大,用戶數量的增加,數據庫應用系統的響應速度下降,性能問題越來越突出。數據庫系統的性能調整與優化對于整個系統的正常運行起著至關重要的作用。基于此,本文主要研究SQI語句、Oracle內存分配的性能優化問題,給出了一般情況下Oracle數據庫應用系統的性能優化方一法,以期推動Oracle數據庫性能優化技術的發展。
1 SQL查詢優化
數據庫系統是管理信息系統的核心,從大多數系統的應用實例來看,查詢操作在各種數據庫操作中占據的比重最大,查詢速度的快慢直接影響數據庫的推廣和應用,對于大型數據庫來說,這一點顯得尤其重要。由于查詢操作在SQL語句中代價最大,因此優質的查詢語句可以大大提高應用系統的性能。
1.1 查找有問題的SQL語句
①利用SQL Trace工具分析SQL語句。
Oracle的SQL Trace工具是確定SQL語句是否被合理優化的最好方法之一。如果發現當前會話行為異常或性能下降,則可以通過該工具獲得有關系統操作性能的信息,如解析、執行和返回數據的次數、CPU時間和執行時間、物理讀和邏輯讀操作次數、庫緩沖區命中率等。一旦為會話激活了SQL-TRACE Oracl。就會在udump管理區創建跟蹤文件。由于SQL Trace將這些信息以一種不可讀的格式存放在跟蹤文件中,因此需要使用TKPROF程序將這些跟蹤信息轉化為有用且可讀的數據,執行命令$TKPROF
1.2 建立合適的SQL語句
①建立“適當”的索引。
建立“適當”的索引是實現查詢優化的首要前提。使用索引的根本目的就是為了提高查詢效率,但索引也不是越多越好,使用索引時應遵循相應的原則。此外,為了降低I/O競爭,索引不應與用戶表空間建在同一磁盤。
②避免相關子查詢。
一個字段的標簽同時在主查詢和where子句中的查詢中出現,那么當主查詢中的字段值改變之后,子查詢必須重新查詢一次。對于子查詢來說,查詢嵌套層次越多,效率越低,因此應當盡量避免它。如果子查詢不可避免,那么要在子查詢中過濾掉盡可能多的行。在Oracle中相關子查詢的執行效率特別低,引入臨時表可以使其速度快100倍左右。
③SELECT子句中避免使用。
ORACLE在解析的過程中,會將‘*’依次轉換成所有的列名,這個工作是通過查詢數據字典完成的,意味著將耗費更多的執行時間。
④避免使用耗費資源的操作。
帶有DISTINCT,UNION,MINUS, INTERSECT,ORDER BY的SQL語句會啟動SQL引擎執行耗費資源的排序(SORT)功能,應盡量避免使用。通常,帶有UNION, MINUS, INTERSECT的SQL語句都可以用其他方式重寫。
⑤選擇聯合查詢的連接次序。
當查詢涉及到5張以上的表時,From語句中表出現的順序可能會影響連接的執行效果。根據優化器的不同,SQL語句中基礎表的選擇也不一樣。如果使用的是CBO,優化器會檢查SQL語句中的每個表的物理大小,索引的狀態,然后選用花費最低的執行路徑;如果使用RBO,并且所有的連接條件都有索引對應,在這種情況下,基礎表就是FROM子句中列在最后的那個表,因為ORACLE的解析器是按照從右到左的順序處理FROM子句中的表名的。
2 調整Oracle內存分配
2.1 優化Oracle數據庫系統全局區
Oracle數據庫內存優化主要通過調整SGA內存結構的大小來提高系統性能,其中共享池和緩沖區高速緩存是SGA兩個最重要的優化區域。建立SGA的目的是為了將數據放在內存以便快速存取,其使用效率會大大影響數據庫系統的性能。通過語句SHOW SGA可以查看分配了多少內存以及每個內部結構的大小。
①Oracle9i動態SGA特性。
Oracle9i數據庫在內部特性方面有很大的增強,其中最重要一個方面就是可以動態設置全部的Oracle SGA控制參數,不需要關閉數據庫,從而SGA每個區域的數據庫活動都可以獨立地被監控,并根據現有Oracle數據庫的需求,在Oracle SGA中動態增加和縮小不同區域,通過ALTER DATABASE和ALTER SYSTEM命令復位全部的Oracle參數,進行SGA內存區域的調整。
②高速緩存和查詢的命中關系。
由于內存的讀寫效率要比磁盤高若干個數量級,因此為了有效提高用戶查詢及用戶程序的執行效率,Oracle運行系統中使用了大量的緩存,而這些緩存是由Oracle系統在運行時所占用的內存來實現的。最理想的情況是把用戶所有的數據裝入內存,但由于機器的內存有限,因而實現這一點是不現實的。因此有一個內存占用和查詢命中的最佳點。
2.2 優化SQL共享池
通過確保大多數語句能夠在共享池中查找到它們自己的一個已分析版本,就可以提高語句分析和執行的效率,降低資源消耗。共享池中存放的信息是應用程序需要經常訪問的,因此需要保持這些信息的高命中率。共享池大小是否合適,主要體現在庫緩沖區和數據字典高速緩沖區的命中率上。
2.3 優化緩沖區高速緩存
緩沖區高速緩存的命中率,對性能至關重要。緩沖區高速緩存越大,Oracle可裝入內存的數據就越多,磁盤的I/O就越少,系統性能就越好。
2.4 調整重做日志緩沖區
重做日志緩沖區如果分配太小,會導致沒有足夠的空間來放重做條目而等待,LGWR進程會頻繁將LOG BUFFER中的數據寫入磁盤增加I/O的次數,影響系統性能。
3 結語
本文對Oracle數據庫性能調整和優化進行了簡要分析和研究,介紹了SQL查詢優化的方法、技巧及相關參數,然后就如何合理設置Oracle9i內存緩沖區進行了詳細說明。數據庫性能調整與優化涉及到多個層面,通過統一規劃、系統分析做出相應的調整,可以提高數據庫的穩定性和可用性,保障系統高效地運行,解決系統瓶頸,節約系統開銷,具有良好的應用價值。
參考文獻
[1]何月順,丁秋林.調整優化Oracle 9i數據庫的性能[J].計算機應用與軟件,2004,21(6):10~11,40.
[2]王曉春,趙霏,張巖.Windows平臺上Oracle數據庫的系統性能優化[J].計算機工程,2004,30(9):79~81.