徐立溥
[摘要]Oracle數據庫是一種使用廣泛的數據庫系統。當前,ORACLE作為大型數據庫管理系統快速發展,但隨即而來的是用戶對Oracle的性能提出了更高的要求以求更好的發揮其強大的數據管理功能。由此,筆者將結合自身的經驗,對Oracle數據庫的優化理論基礎,以及具體的優化方法進行探討,希望對廣大讀者能有所啟發。
[關鍵詞]Oracle 數據庫 參數優化 SQL
中圖分類號:TP3文獻標識碼:A文章編號:1671-7597(2009)0520049-01
Oracle數據庫是一種使用廣泛的數據庫系統。當前,ORACLE作為大型數據庫管理系統快速發展,但隨即而來的是用戶對Oracle的性能提出了更高的要求以求更好的發揮其強大的數據管理功能。由此,筆者將結合自身的經驗,對Oracle數據庫的優化理論基礎,以及具體的優化方法進行探討,希望對廣大讀者能有所啟發。
一、Oracle數據庫優化理論基礎
根據學界的觀點,我們用絕對的數量作為絕對指標來定義Oracle數據庫的優化是不科學的,實際上,我們應當用優化前后數據庫的各種性能指標的對比來衡量Oracle數據庫優化的結果。尤其是SQL語句的執行速度,SQL語句帶來的系統負擔,應用的響應速度,甚至應用所服務的終端用戶的直接感受。于是據庫實例級的調整,大多用來解決數據庫結構性故障,相應地也能解決因為結構性故障帶來的普遍性的性能問題。然而我們注意到,用戶所真正關心的,切身感受到的單點數據庫響應慢的問題往往是不良的SQL語句,過期的統計數據和其導致的不良的執行計劃,不良的數據表結構,過度的觸發器使用,不良的應用同步鎖造成的。
二、Oracle數據庫優化具體方法
1.參數優化。由于Oracle中參數過多,筆者在這里節選部分有代表意義的參數并對其優化進行介紹。
(1)CHECKPOINT-PROCESS參數。該參數決定CHPT后臺進程是否被激活。在檢查過程中所有數據文件的標題必須更新。這項任務通常由LGWR進程完成,把塊寫到磁盤則是DBWR進程的工作。如果在檢查點中發現LGWR減慢,為消除LGWR正在進行的額外工作必須激活CHPT。
(2)DB_BLOCK_SIZE參數。該參數表示Oracle數據庫塊的大小,以字節為單位,典型值為2048或4096。如果根據數據庫的行數設定該參數,將會減少輸入輸出。在某些含有大量順序存取的應用程序中,將數據庫塊設定置得大些是有益的。
(3)LOG_FILES參數。該參數指定運行期間數據庫可打開的日志文件數。若需要較大的SGA空間,而不需要多個日志文件,則可減少該值。
(4)OPTIMIZRER_MODE參數。若該參數的值為TRUE,則Oracle優化器選擇基于規則的優化;若設置為COST,并且在數據字典中存在有統計信息,則優化器選擇基于代價的優化方法進行優化;設置為FIRST_ROWS時,優化程序將選擇響應時間最短的運行方案。
2.選擇正確的服務模式。當并發用戶數大于400時可以考慮采用mts模式;當并發用戶數小于400時應當采用dedicate方式;當并發用戶數大于400且系統內存資源可用時應當采用dedicate模式;當并發用戶數小于400且內存資源不夠用時應當采用mts模式。mts模式和dedicate橫式的對比如表1所示。

3.采取統一的SQL程序。因為ORACLE在執行SQL文件時,首先將當前要執行的SQL文件與公共區域中保存的先前執行過的SQL文件進行比較,SQL文件相同時,就會跳過當前要執行的SQL文件的解析處理,這樣通過減少解析次數就可以加快SQL文件的執行速度。
4.選取合適的SQL代碼。在進行數據庫操作時,同一結果可以用很多方法來實現。我們應當選取合適的SQL代碼,使其更容易明了,并且運行速度更快。
5.加強對等待事件的跟蹤。在Oracle數據庫中,當一個進程或者該進程所代表的寄生于該進程的session在等待某個系統資源時,就會觸發一個Oracle內部的事件。該事件將會被登記到v$session_wait,v$system_
wait的Oracle內部視圖上,通過編寫程序分時段定期跟蹤該視圖,可以收集定位出系統運行期內的資源瓶頸。通過系統的結構調整可以消除或者減弱該瓶頸對系統運行的影響。同時,也可以執行Oracle數據庫系統自帶的診斷分析工具stat spack來跟蹤分析數據庫系統的運行狀態。
6.跟蹤、優化不良的SQL語句。在絕大多數的數據庫應用中,造成應用程序反應緩慢,系統資源消耗大的直接原因是不良的SQL語句。往往一個不良的SQL語句可以導致整個數據庫系統高負荷運轉,甚至對外暫停服務。所以數據庫優化的重點應當集中于跟蹤、優化不良的SQL語句。
7.優化設置控制文件的個數、位置及其備份。建議CONTROL FILE初始化參數中指定多個文件應大于2,并將控制文件鏡像到不同位置,并要把這些控制文件備份到安全的磁盤中。
8.明確列名。使用SELECT取得的列名一定要明確指定,并且應當使抽出的記錄盡量少。用SORT等的場合,ORACLE將必要的列的值放到WORK領域,因此,減少列數也就節約了I/O回數。
三、結束語
Oracle數據庫的優化工作是一個長期的、復雜的、循環往復的工作過程。根據筆者的實戰經驗,上述方法能夠起到提高ORACLE數據庫性能以及提高ORACIE應用程序執行效率的作用。對于Oracle數據庫的探索不會停止,其也必將在各個領域發揮越來越大的作用。在眾多Oracle人員的努力之下,我國Oracle數據庫水平定能邁上新的臺階。
參考文獻:
[1]甕正科、王新英著,Oracle8.X For Windows NT實用教程[M].北京:清華大學出版社,1999.
[2]Gaja krishna Vaidyanatha1 Orcale 性能優化技術內幕[M].北京:機械工業出版社,2002.
[3]王珊著,數據庫系統概論[M].北京:高等教育出版社,2000.2.
[4]Gunt her N.The Practical Performance Analyst,McGraw-Hill,1998.