徐立溥
[摘要]Oracle數(shù)據(jù)庫是一種使用廣泛的數(shù)據(jù)庫系統(tǒng)。當前,ORACLE作為大型數(shù)據(jù)庫管理系統(tǒng)快速發(fā)展,但隨即而來的是用戶對Oracle的性能提出了更高的要求以求更好的發(fā)揮其強大的數(shù)據(jù)管理功能。由此,筆者將結(jié)合自身的經(jīng)驗,對Oracle數(shù)據(jù)庫的優(yōu)化理論基礎(chǔ),以及具體的優(yōu)化方法進行探討,希望對廣大讀者能有所啟發(fā)。
[關(guān)鍵詞]Oracle 數(shù)據(jù)庫 參數(shù)優(yōu)化 SQL
中圖分類號:TP3文獻標識碼:A文章編號:1671-7597(2009)0520049-01
Oracle數(shù)據(jù)庫是一種使用廣泛的數(shù)據(jù)庫系統(tǒng)。當前,ORACLE作為大型數(shù)據(jù)庫管理系統(tǒng)快速發(fā)展,但隨即而來的是用戶對Oracle的性能提出了更高的要求以求更好的發(fā)揮其強大的數(shù)據(jù)管理功能。由此,筆者將結(jié)合自身的經(jīng)驗,對Oracle數(shù)據(jù)庫的優(yōu)化理論基礎(chǔ),以及具體的優(yōu)化方法進行探討,希望對廣大讀者能有所啟發(fā)。
一、Oracle數(shù)據(jù)庫優(yōu)化理論基礎(chǔ)
根據(jù)學(xué)界的觀點,我們用絕對的數(shù)量作為絕對指標來定義Oracle數(shù)據(jù)庫的優(yōu)化是不科學(xué)的,實際上,我們應(yīng)當用優(yōu)化前后數(shù)據(jù)庫的各種性能指標的對比來衡量Oracle數(shù)據(jù)庫優(yōu)化的結(jié)果。尤其是SQL語句的執(zhí)行速度,SQL語句帶來的系統(tǒng)負擔(dān),應(yīng)用的響應(yīng)速度,甚至應(yīng)用所服務(wù)的終端用戶的直接感受。于是據(jù)庫實例級的調(diào)整,大多用來解決數(shù)據(jù)庫結(jié)構(gòu)性故障,相應(yīng)地也能解決因為結(jié)構(gòu)性故障帶來的普遍性的性能問題。然而我們注意到,用戶所真正關(guān)心的,切身感受到的單點數(shù)據(jù)庫響應(yīng)慢的問題往往是不良的SQL語句,過期的統(tǒng)計數(shù)據(jù)和其導(dǎo)致的不良的執(zhí)行計劃,不良的數(shù)據(jù)表結(jié)構(gòu),過度的觸發(fā)器使用,不良的應(yīng)用同步鎖造成的。
二、Oracle數(shù)據(jù)庫優(yōu)化具體方法
1.參數(shù)優(yōu)化。由于Oracle中參數(shù)過多,筆者在這里節(jié)選部分有代表意義的參數(shù)并對其優(yōu)化進行介紹。
(1)CHECKPOINT-PROCESS參數(shù)。該參數(shù)決定CHPT后臺進程是否被激活。在檢查過程中所有數(shù)據(jù)文件的標題必須更新。這項任務(wù)通常由LGWR進程完成,把塊寫到磁盤則是DBWR進程的工作。如果在檢查點中發(fā)現(xiàn)LGWR減慢,為消除LGWR正在進行的額外工作必須激活CHPT。
(2)DB_BLOCK_SIZE參數(shù)。該參數(shù)表示Oracle數(shù)據(jù)庫塊的大小,以字節(jié)為單位,典型值為2048或4096。如果根據(jù)數(shù)據(jù)庫的行數(shù)設(shè)定該參數(shù),將會減少輸入輸出。在某些含有大量順序存取的應(yīng)用程序中,將數(shù)據(jù)庫塊設(shè)定置得大些是有益的。
(3)LOG_FILES參數(shù)。該參數(shù)指定運行期間數(shù)據(jù)庫可打開的日志文件數(shù)。若需要較大的SGA空間,而不需要多個日志文件,則可減少該值。
(4)OPTIMIZRER_MODE參數(shù)。若該參數(shù)的值為TRUE,則Oracle優(yōu)化器選擇基于規(guī)則的優(yōu)化;若設(shè)置為COST,并且在數(shù)據(jù)字典中存在有統(tǒng)計信息,則優(yōu)化器選擇基于代價的優(yōu)化方法進行優(yōu)化;設(shè)置為FIRST_ROWS時,優(yōu)化程序?qū)⑦x擇響應(yīng)時間最短的運行方案。
2.選擇正確的服務(wù)模式。當并發(fā)用戶數(shù)大于400時可以考慮采用mts模式;當并發(fā)用戶數(shù)小于400時應(yīng)當采用dedicate方式;當并發(fā)用戶數(shù)大于400且系統(tǒng)內(nèi)存資源可用時應(yīng)當采用dedicate模式;當并發(fā)用戶數(shù)小于400且內(nèi)存資源不夠用時應(yīng)當采用mts模式。mts模式和dedicate橫式的對比如表1所示。
3.采取統(tǒng)一的SQL程序。因為ORACLE在執(zhí)行SQL文件時,首先將當前要執(zhí)行的SQL文件與公共區(qū)域中保存的先前執(zhí)行過的SQL文件進行比較,SQL文件相同時,就會跳過當前要執(zhí)行的SQL文件的解析處理,這樣通過減少解析次數(shù)就可以加快SQL文件的執(zhí)行速度。
4.選取合適的SQL代碼。在進行數(shù)據(jù)庫操作時,同一結(jié)果可以用很多方法來實現(xiàn)。我們應(yīng)當選取合適的SQL代碼,使其更容易明了,并且運行速度更快。
5.加強對等待事件的跟蹤。在Oracle數(shù)據(jù)庫中,當一個進程或者該進程所代表的寄生于該進程的session在等待某個系統(tǒng)資源時,就會觸發(fā)一個Oracle內(nèi)部的事件。該事件將會被登記到v$session_wait,v$system_
wait的Oracle內(nèi)部視圖上,通過編寫程序分時段定期跟蹤該視圖,可以收集定位出系統(tǒng)運行期內(nèi)的資源瓶頸。通過系統(tǒng)的結(jié)構(gòu)調(diào)整可以消除或者減弱該瓶頸對系統(tǒng)運行的影響。同時,也可以執(zhí)行Oracle數(shù)據(jù)庫系統(tǒng)自帶的診斷分析工具stat spack來跟蹤分析數(shù)據(jù)庫系統(tǒng)的運行狀態(tài)。
6.跟蹤、優(yōu)化不良的SQL語句。在絕大多數(shù)的數(shù)據(jù)庫應(yīng)用中,造成應(yīng)用程序反應(yīng)緩慢,系統(tǒng)資源消耗大的直接原因是不良的SQL語句。往往一個不良的SQL語句可以導(dǎo)致整個數(shù)據(jù)庫系統(tǒng)高負荷運轉(zhuǎn),甚至對外暫停服務(wù)。所以數(shù)據(jù)庫優(yōu)化的重點應(yīng)當集中于跟蹤、優(yōu)化不良的SQL語句。
7.優(yōu)化設(shè)置控制文件的個數(shù)、位置及其備份。建議CONTROL FILE初始化參數(shù)中指定多個文件應(yīng)大于2,并將控制文件鏡像到不同位置,并要把這些控制文件備份到安全的磁盤中。
8.明確列名。使用SELECT取得的列名一定要明確指定,并且應(yīng)當使抽出的記錄盡量少。用SORT等的場合,ORACLE將必要的列的值放到WORK領(lǐng)域,因此,減少列數(shù)也就節(jié)約了I/O回數(shù)。
三、結(jié)束語
Oracle數(shù)據(jù)庫的優(yōu)化工作是一個長期的、復(fù)雜的、循環(huán)往復(fù)的工作過程。根據(jù)筆者的實戰(zhàn)經(jīng)驗,上述方法能夠起到提高ORACLE數(shù)據(jù)庫性能以及提高ORACIE應(yīng)用程序執(zhí)行效率的作用。對于Oracle數(shù)據(jù)庫的探索不會停止,其也必將在各個領(lǐng)域發(fā)揮越來越大的作用。在眾多Oracle人員的努力之下,我國Oracle數(shù)據(jù)庫水平定能邁上新的臺階。
參考文獻:
[1]甕正科、王新英著,Oracle8.X For Windows NT實用教程[M].北京:清華大學(xué)出版社,1999.
[2]Gaja krishna Vaidyanatha1 Orcale 性能優(yōu)化技術(shù)內(nèi)幕[M].北京:機械工業(yè)出版社,2002.
[3]王珊著,數(shù)據(jù)庫系統(tǒng)概論[M].北京:高等教育出版社,2000.2.
[4]Gunt her N.The Practical Performance Analyst,McGraw-Hill,1998.