
摘 要:文章將結合自身使用數據庫的經驗,對Oracle數據庫系列的性能優化和調整進行研究。內容包括SQL語句優化、內存分配的調整和磁盤I/O的優化。通過統一的規劃、分析做出相應的調整,保障系統高效地運行,節約系統和內存的開銷、解決系統瓶頸問題,從而提高數據庫的實用性、穩定性和持久性。
關鍵詞:Oracle;性能;SQL語句優化;內存調整;磁盤I/O
1 概述
在大型的數據庫應用系統中,隨著數據處理量的劇增和數據處理復雜程度的增加,用戶對作為系統核心的數據庫的安全和性能的要求越來越高。在盡量不增加硬件成本的情況下提升現有的數據庫應用系統的性能,是所有大型數據庫系統開發和維護的一個重要的目標。
2 Oracle數據庫性能優化與調整技術
Oracle作為全球第一大數據庫產品,其優越性不僅在于其強大的安全性,功能的穩定性,同時它還是高度可優化的軟件工具[1]。可以經常性的調整和優化其性能,以防止出現系統瓶頸。
數據庫性能優化與調整所涉及的內容比較復雜,涉及數據庫運行的很多方面,文章基于某大學圖書管理系統進行研究,主要是從數據庫角度進行優化與調整。主要包含:查詢優化、內存調整和磁盤I/O分配這三方面。也是最常用的、影響最大的幾個方面。只有將其充分利用得當,才能更加突出性能優化的效率。
2.1 Oracle數據庫查詢優化
2.1.1 語句優化器
根據優化器獲得語句執行計劃和統計信息,了解查詢結果反應遲鈍的現象,從而找出不足之處,加以修改,就能夠極大的提高語句查詢的速度。快速得到想要的結果。
Autotrace優化器的使用:Autotrace優化器能夠顯示SQL的查詢結果,能夠自動顯示統計信息和執行計劃[2]。利用Autotrace工具產生的結果,我們就可以將它作為優化的依據。
2.1.2 SQL語句的優化
在寫SQL語句時,大多數人只關注著語句查詢出來的結果是否是自己想要的。至于等待時間則顯得尤為不重要。但是一旦我們數據庫中的數據量過大,查詢語句條件過多或者有過多的查詢條件、索引的不適當的建立都會造成用戶等待時間過長。那么如果將它們進行合理的優化后,查詢的速度會更為明顯。
(1)使用不當的SQL語句
避免在索引列上使用函數或計算,在where子句中,如果索引是函數的一部分,優化器會使用全表掃描而不是繼續使用索引;要避免在索引列上使用“!=”和“not”,因為索引只能告訴哪些數據存在于表中,而不會去告訴哪些數據不存在于表中。當數據庫遇到“not”或是“!=”時,它就會停止使用索引,去執行全表掃描。
(2)參數設置
將初始化參數OPTIMIZER_INDEX_COST_ADJ的非默認值25變為默認值100。這個參數影響CBO決定使用一個有效的索引而不是全表掃描。
(3)使用工具獲得執行計劃
也就是前面所講的,根據使用AUTOTRACE可以查看出具體的查詢執行情況,從而可以分析得出效率低的原因。使用該工具后,確保了在提交的這些語句中會給出最佳的SQL語句。
優化的工具還有EXPLANE,SQLTRACE等,都是能夠提高SQL語句的性能[3]。
2.2 優化數據庫內存分配
如果一個數據庫本身的內存很小,即便window系統是4G或6G內存或者跟更大,數據庫若想保存一張數據量很大的表時,也要花費很長時間。操作系統的內存再大也發揮不出來其作用。那么,為了解決軟件運行的速度問題,使內存充分利用起來,調整數據庫的內存就顯得尤為重要。
Oracle數據庫的內存可劃分為系統全局區(SGA)和進程全局區(PGA)。SGA是一組共享的內存結構,它與操作系統、CPU、內存有關,在系統物理內存的一半左右。它里面主要是存儲數據庫實例的數據和控制文件信息,是數據庫實例的基本組成部分。所以,如果想提高數據庫的性能問題,那么就要對SGA的參數進行調整,使其達到最優。
通過調整參數值,可以在查詢時提高資源利用效率,從而減少用戶等待時間。常用的幾個參數如下:
Log_buffer:日志緩沖區的大小設置,作為一個正式系統,可能考慮先設置這部分為log_buffer最好在1-3M之間,即使范圍很大,也不能全部用到,之后可針對具體情況再進一步調整。重做日志緩沖區保存著數據庫的重做條目(redo entry)或修改日志。日志緩沖區的內容總是會盡快寫入重做日志中。
Large_pool_size:大緩沖池的設置,一般情況下在20-30M就可以了。大緩沖池的作用就是保存并行查詢時的信息。
shared_pool_size:共享池是指SGA中存儲共享內存結構的區域,共享池又包括庫緩存池(library cache)和數據字典緩沖池。如果要提高系統的性能,就要確保共享池的空間足夠才行。
2.3 磁盤I/O優化
磁盤I/O對于整個Oracle數據庫來說,是其重要的組成部分。通過了解磁盤I/O,將其進行合理調整,將大大提高整個系統數據庫的性能。它也是數據庫的核心。
數據庫的數據最終是要存儲在物理磁盤上。磁盤I/O的操作是數據庫性能最重要的方面,是整個數據庫最大的開銷部分。影響磁盤I/O的主要因素有磁盤競爭、I/O次數過多以及數據塊的分配管理。
以下幾點可合理分配磁盤I/O:(1)創建用戶表空間,與系統表空間要分開存放在不同的磁盤上,以減少磁盤競爭。(2)對于經常使用的對象,應將其訪問量大的數據文件單獨放在一個磁盤中。而且同一個表空間的多個數據文件也要放在不同的磁盤上,因為若放在同一磁盤上會引起I/O競爭。(3)將重做日志文件進行分組。因為我們平時修改的數據都是會先寫入重做日志文件中。所以就需要重做日志文件空間足夠大。
3 Oracle數據庫系統優化實驗
以大學圖書館信息系統作為研究對象的數據庫優化實例,該數據庫約為5G byte左右,使用UNIX操作系統,優化結果如表1所示。從表1可以看出,數據庫經過調整與優化內存、調整與優化I/O和SQL優化后,響應時間變得越來越短,系統性能得到逐步提高。
4 結束語
為了保證應用系統的高效性和穩定性,文章從內存優化與調整、 SQL語句的優化與調整以及SQL調整等方面,提出了具有針對性的優化方法。數據庫系統的性能調整與優化是一個系統工程。要使系統能穩定高效的運行,除了需要對系統本身的體系結構有深入的理解的同時,還需要對系統運行的環境比較熟悉。并且體現在系統設計、開發、運行等各個階段對數據庫及應用程序等進行調整和性能調節,從而保證應用系統的高效、穩定運行。
參考文獻
[1]蓋國強.循序漸進Oracle數據庫管理、優化與備份恢復[M].北京:人民郵電出版社,2007.
[2]孫樹軍.基于數據庫的性能調整及優化技術研究[Z].北京工業大學圖書館,2011:9-41.
[3]鄒俊.基于數據庫系統性能調整與優化研究[Z].江西財經大學圖書館,2006:6-14.