關于 Oracle 優(yōu)化方針
當擁護抱怨系統(tǒng)的響應時間時,通常優(yōu)化不是在者種情況下才進行。因為當響應時間比較慢時,再通過實現(xiàn)某些最有效的優(yōu)化策略來解決,就已經太遲了,出現(xiàn)這種情況時,如果用戶還不愿意
徹底重新設計
I/O
來或多或少地提高一點性能。
應用程序,那么就只能通過重新
分配內存或優(yōu)化
§1.1
優(yōu)化的優(yōu)先步驟
下面是對基于ORACLE應用的優(yōu)化的推薦方法,它分為10個步驟。按照投資回報減少的順序給出優(yōu)化過程步驟,對性能影響最大就越靠前:
為獲得最佳的系統(tǒng)性能,用戶有時需要調整商業(yè)規(guī)則。主要考慮有關配置問題。比如所申請的
線路;所購買的
網絡設備
等。即如果在實際使用時已經發(fā)現(xiàn)超出物理的能力,則公司的上層就應該
追加另外的配置方案
,如采用
多層配置
方案等。
數(shù)據(jù)庫設計階段通常要經歷規(guī)范化階段,此時需要對數(shù)據(jù)進行分析,以降低數(shù)據(jù)冗余,除了主鍵外,任何數(shù)據(jù)元素都應當在數(shù)據(jù)庫中只能出現(xiàn)一次。有時又需打破這種規(guī)范形式,用戶還需要保證數(shù)據(jù)庫通過匯總值經常性地進行記憶。例如,在每次進行訪問的時候,不應當強迫應用程序重新計算給定訂單中的所有商品的總價。另外,為了更快地訪問信息,用戶應當建立主關鍵字和外部關鍵字索引。
數(shù)據(jù)設計階段的另一個考慮是避免數(shù)據(jù)爭用。也就是說,把對數(shù)據(jù)的訪問進行定位,以避免任何請求特定數(shù)據(jù)范圍的進程可以局限到特定的實例。
在ORACLE 并行服務器中,需要尋找同步點,對設計不良的系統(tǒng),就存在順序命令編號的要求,也就是同步的問題。
為了避免數(shù)據(jù)爭用,考慮:
l
將數(shù)據(jù)分區(qū)
l
使用局部或全局索引
對于某些帶智能處理的設計而言,在戰(zhàn)略上
使用緩存數(shù)據(jù)技術。在某零售應用程序中,用戶在每天開始的時候可以選擇一次稅率,并將其緩存在應用程序中,通過這種方式,就可以避免一天之中總是重復地獲取相同的信息。
在設計完應用系統(tǒng)應用程序之后,就需要對數(shù)據(jù)庫的邏輯結構進行規(guī)劃,這一步主要是對索引的設計進行調整,以保證數(shù)據(jù)被正確索引。在邏輯結構設計階段,則應當創(chuàng)建輔助索引來支持應用程序。
對于由于爭用所引起的性能問題,經常會涉及到插入相同的塊,或者是序號錯誤的使用。在索引的設計、使用和定位的時候,以及使用序號產生程序和簇的時候,應當格外小心。
優(yōu)化ORACLE服務器之前,應當確保用戶應用程序充分利用了SQL語言的特性,以及Oracle為增強應用程序處理能力的相關特性。根據(jù)用戶應用程序的要求,可以運用下述特性技術:
l
數(shù)組處理
l
ORACLE 優(yōu)化程序
l
行級鎖管理器
l
PL/SQL
無論用戶在編寫新的SQL 語句,或是對應用程序中存在的疑問的語句進行優(yōu)化,對數(shù)據(jù)庫操作的優(yōu)化本質上都是關心CPU,磁盤I/O等資源情況。下面是所作的步驟。
1.
查找最消耗資源的語句
利用諸如 TKPROF、SQL TRACE、SQL Analyze、Oracle trace 和Enterprise Manager Tuning Pack 等工具。可以查出存在問題的語句和存儲過程。此外,用戶還可以通過V$SORT_USAGE視圖來查看與臨時段關聯(lián)的會話和SQL語句。
在優(yōu)化工作中,最有可能提高性能的語句包括:
l
整體消耗資源最多的 語句
l
每行消耗資源最多的語句
l
執(zhí)行頻率高的語句
在V$SQLAREA視圖中,用戶可以發(fā)現(xiàn)仍然駐留在緩存的語句,這些語句進行了大量的磁盤I/O和緩存獲取操作。
2
.對這些語句進行優(yōu)化
需要記住的是,應用程序的設計情況是性能好壞的基礎。對于低效的應用程序設計方案,不能通過SQL語句的優(yōu)化來彌補它的不足。如果用戶遭遇到SQL 語句的優(yōu)化問題,那么也許就需要改應用程序設計方案。下面方法可以減少特定語句所消耗的資源:
l
使語句使用更少的資源
l
降低使用語句的頻率
由于語句執(zhí)行大量的事務處理
,或者其工作效率低下,或者兩者兼而有之,就可能消耗大量的資源。用戶可以不改程序,而是更改索引結構;或只需改變SQL 語句自身(不改環(huán)境邏輯)就可以完成任務。
為了確保數(shù)據(jù)庫訪問的效率,需要考慮使用簇、哈希簇、B*樹索引、位圖索引、以及優(yōu)化程序提示。此外,還應當考慮對表進行分析,以及利用直方圖表來分析。從而幫助優(yōu)化程序確定最佳查詢方案。
有效訪問可能意味著增加索引,或增加特定應用程序的索引,隨后再其撤消。還可能意味著建立數(shù)據(jù)庫之后,再對設計結果進行再次分析。如果用戶發(fā)現(xiàn)實際響應時間比必須響應時間要長,則需要尋找其他的方法來提高設計性能。
在ORACLE 8I , 系統(tǒng)共享內存被動態(tài)地分配如下結構:
l
數(shù)據(jù)字典緩存
l
庫緩存
l
上下文區(qū)域(如果運行多線程服務器)
用戶可以設置下面內存結構:
l
緩沖區(qū)緩存
l
日志緩沖區(qū)
l
序列緩沖區(qū)
內存資源的適當分配可以提高緩存的性能,降低SQL語句的解析,同時可以減少分頁(Paging)和叫換(Swapping)。
進程的本地區(qū)域包括:
l
上下文區(qū)域(如果運行多線程服務器)
l
排序區(qū)域
l
哈希區(qū)域
值得注意的是,對與大量的影響到分頁和交換的機器物理內存。不要將其分配相同全局區(qū)(SGA)。
磁盤I/O 操作會降低軟件應用程序的性能。優(yōu)化I/O涉及到:
l
調度數(shù)據(jù),以使I/O分配時避免磁盤爭用問題
l
最佳訪問方式是將數(shù)據(jù)存儲在數(shù)據(jù)塊中:將自由列表設定為合適的大小,以及恰當?shù)腜CTFREE和PCTUSED
l
為用戶創(chuàng)建足夠大的盤區(qū),以避免表的動態(tài)擴展,它的負面影響到高容量OLTP應用程序的性能。
l
評測原設備(raw device)的使用情況。
對于多個ORACLE 并發(fā)請求,會產生對ORACLE資源的爭應。應避免下面的爭用發(fā)生:
l
塊爭用
l
共享池爭用
l
鎖爭用
l
Pingping(并行環(huán)境)
l
鎖存器(latch)爭用
涉及以下方面:
l
UNIX 緩沖區(qū)的大小
l
邏輯卷管理器
l
內存使用及進程的大小
§1.2
應用優(yōu)化方法
在沒有建立明確的優(yōu)化目標前,最好不要開始進行優(yōu)化。“使其盡用戶所能運轉起來”聽起來是一個目標,但
很難確定實際情況是否已達到了目標。
一個更有用的目標如下:我們需要20名操作員,每名每小時輸入20條 命令,在30 分鐘內必須組裝列表。
此外,用戶還應當記住,在獲得目標后可能存在一些沖突。如為獲得SQL語句的最佳性能,就會犧牲并發(fā)運行在數(shù)據(jù)庫中的其他SQL語句性能。
用戶應當創(chuàng)建一系列的最少可重復測試,如,如果用戶卻定某條SQL語句影響性能。那么就在SQL*PLUS 中(用SQL Trace 或ORACLE Trace)運行原始版本和 修訂版本的語句,以便可通過察看統(tǒng)計結果發(fā)現(xiàn)性能的差別。
在創(chuàng)建了最少可重復測試后,可通過腳本來執(zhí)行測試,可對結果進行匯總和報告。通過這種方法,用戶可以對各種假設情況進行測試。
從ORACLE的緩存算法可以看出,當?shù)谝淮伟褦?shù)據(jù)緩存到內存中,它的開銷比以后(只從內存中訪問數(shù)據(jù))的都要大。因為第2次以后不需磁盤讀數(shù)據(jù)到內存。
1.通過分析執(zhí)行每個腳本及所得的結果記錄,此外,用戶還應當是測試自動化,有下列優(yōu)點:
2.可以根據(jù)優(yōu)化程序的能力,更快地對測試的效能進行計算。
3.由于每次測試所使用的設備相同,可保證測試體系方法的一致性。
無經驗的人經常犯下面的錯誤:
l
受預先設想的見解影響較大;
l
隨機進行各種方案的測試;
l
無目的、無依據(jù)的修改環(huán)境。
我們應該通過編寫用戶認為問題出處的描述,仔細
推敲分析過程,理清用戶的思路,進而確定
錯誤所在
。還要請一些
對應用程序有較好了解
的人參與,驗證
SQL語句優(yōu)化程序,設計出解決方案。
另外,要避免解決方案以外的
奇怪的想法
,如,通過猜測方法來更改系統(tǒng)的參數(shù),用戶對這種做法要十分謹慎,否則做出了某種假設,而用戶并沒有對這種假設有完整的理解,卻急于實現(xiàn)這種想法。于是草率行事。由此導致性能嚴重下降以至于用戶只好從備份中恢復某些系統(tǒng)環(huán)境。再就是
避免偏見
。當定位優(yōu)化問題的時候,要避免偏見,而要用戶描述性能問題所在。但也不要期望用戶確切知道問題所在。
Oracle數(shù)據(jù)庫系統(tǒng)的安裝與以后應用系統(tǒng)的運行有著密切的關系,如果一個中大型的應用系統(tǒng)沒有充分設計和規(guī)劃,而是采用默認的方法安裝,則給以后應用系統(tǒng)的運行帶來一定的影響。下面給出一些建議。
如果在分析階段得到用戶的初步資料,在與用戶討論確認之后就可以訂購數(shù)據(jù)庫服務器了。當數(shù)據(jù)庫服務器到貨后,就可以與操作系統(tǒng)人員一起規(guī)劃服務器的操作系統(tǒng)的安裝和Oracle數(shù)據(jù)庫系統(tǒng)的安裝等。
當數(shù)據(jù)庫服務器在開箱后,就開始規(guī)劃如何安裝操作系統(tǒng)軟件。因為一般的小型機或多數(shù)服務器機器在出廠后是不安裝任何軟件的。所有安裝操作系統(tǒng)和其他所需要的軟件都是在機器安裝完成后由供應商進行的。
為了使所安裝的操作系統(tǒng)能滿足Oracle系統(tǒng)的基本要求,有的服務器的操作系統(tǒng)需要注意某些Oracle的要求:
l
操作交換區(qū)
交換區(qū)是Oracle的一項基本的要求。可以根據(jù)Oracle的發(fā)行要求來確定。一般交換區(qū)大小的要求是該服務器內存的2倍至4倍之間。過小的交換區(qū)可能導致Oracle系統(tǒng)安裝的失敗,所以建議交換區(qū)最好是內存的4倍為佳。
l
硬盤格式化的考慮
在安裝操作系統(tǒng)時,安裝程序回提示將硬盤化分為不同大小的部分。在安裝操作系統(tǒng)時就開始考慮哪個硬盤是用來安裝Oracle系統(tǒng)的,哪個是用來存放數(shù)據(jù)文件的等。建議用于存放Oracle數(shù)據(jù)庫系統(tǒng)的目錄一定比Oracle系統(tǒng)發(fā)行要求的2倍以上;其次就是考慮Oracle數(shù)據(jù)庫系統(tǒng)的數(shù)據(jù)文件的目錄所對應的硬盤的大小。Oracle系統(tǒng)所在硬盤最好不要與其他的軟件混早一起。
當服務器平臺已完成操作系統(tǒng)的安裝后,就應該開始認真的考慮下面的問題:
l
操作系統(tǒng)的信號量
Oracle在某些UNIX操作系統(tǒng)環(huán)境下安裝需要合適的操作系統(tǒng)信號量。應該根據(jù)Oracle版本發(fā)行的要求進行設置,比如在SUN 環(huán)境下,需要以root 登錄并根據(jù)Oracle安裝手冊的參數(shù)要求修改/etc目錄的system文件。然后在進行Oracle RDBMS的安裝。
l
是否采用升級方案
如果應用是將舊的應用系統(tǒng)上進行升級的話,要考慮系統(tǒng)的性能問題。一般建議采用非升級安裝,采用人工升級。因為系統(tǒng)自動升級安裝會給應用帶來性能問題。
l
安裝類型方案
采用自定義安裝進行Oracle數(shù)據(jù)庫系統(tǒng)的安裝,這樣考慮根據(jù)需要定義包括字符集、數(shù)據(jù)庫塊的大小、數(shù)據(jù)文件的大小等。
l
安裝點的考慮
Oracle的安裝點就是指數(shù)據(jù)文件、日志文件和控制文件的安置路徑,為了使系統(tǒng)在以后運行性能達到優(yōu)化,建議將數(shù)據(jù)文件、日志文件和控制文件的安置路徑與數(shù)據(jù)庫系統(tǒng)存放在不同的路徑上。最好將數(shù)據(jù)文件、日志文件和控制文件分別存放在不同的路徑。
l
SYSTEM表空間對應數(shù)據(jù)文件
在自定義安裝會話中,建議你根據(jù)需要設置system表空間所對應的數(shù)據(jù)文件的大小。一般要設置比默認值的2倍。該數(shù)據(jù)文件的大小最好是在300MB至500MB間。因為數(shù)據(jù)文件太小不利于系統(tǒng)的運行。
l
臨時表空間對應的數(shù)據(jù)文件
臨時表空間對應的數(shù)據(jù)文件可以根據(jù)將來系統(tǒng)存放的應用的處理情況來定。比如系統(tǒng)將來可能要經常進程排序處理,則需要設置較大的臨時表空間,也可能需要再建立新的臨時表空間。這里建議臨時表空間的數(shù)據(jù)文件在100MB至300MB左右。
l
回滾段表空間對應的數(shù)據(jù)文件
如果是Oracle8i及以前的版本,則考慮為RBS表空間建立較大的數(shù)據(jù)文件。最好數(shù)據(jù)文件在300MB至500MB之間,如果不夠在完成安裝后再進行擴展。但是不要采用默認值。
l
日志文件的大小
日志文件的大小對于Oracle系統(tǒng)的運行也是相當重要。默認值是太小。建議日志文件大小在10MB至50MB左右。
l
控制文件的大小
如果是Oracle8及以上版本,控制文件文件除了存放數(shù)據(jù)文件信息和日志文件信息外,換存放恢復信息等。所以控制文件所在目錄應該有足夠的擴展空間。一般建議在該目錄應該有200MB 以上空間。
l
數(shù)據(jù)庫塊的大小
如果你的應用系統(tǒng)是OLTP的話,可以采用較小的數(shù)據(jù)庫塊。如果是DSS類型的應用系統(tǒng),則可以設置較大的數(shù)據(jù)庫塊,目前Oracle產品所允許的數(shù)據(jù)庫塊可以是2KB至64KB之間。無論你選擇較大的塊或較小的塊,它的值都必須是2的整數(shù)倍,比如2048,4096,8192等。但需要注意的是,如果操作系統(tǒng)為64位,則可選擇較大的塊。
l
字符集的選擇
字符集是Oracle系統(tǒng)專門支持的一項技術。詳細請參考另外的章節(jié)。一般不要與另外的已經存放的Oracle系統(tǒng)的字符集產生沖突即可。但如果你的環(huán)境是一個新的平臺,不需要與其它平臺進行數(shù)據(jù)交換的話,建議選擇默認的字符集。這樣可以利于將來的修改。
一部分設計師和用戶都這樣認為,用戶的應用系統(tǒng)有幾個子系統(tǒng),就應該建立幾個數(shù)據(jù)庫(實例)。將每個應用系統(tǒng)建立在一個獨立的數(shù)據(jù)庫(實例)上。這樣的考慮主要是對Oracle系統(tǒng)的結構或工作方式不夠了解造成。一般來說,如果用戶的應用系統(tǒng)不是非常龐大,服務器的內存也有限,建議不要在同一臺服務器上創(chuàng)建兩個以上的數(shù)據(jù)庫(實例)。因為每個數(shù)據(jù)庫(實例)在啟動后都回占用大量的內存和CPU時間。如果有多個不同的應用系統(tǒng),只要分別為不同的應用系統(tǒng)建立的表空間即可。
§2.3 Oracle
系統(tǒng)安裝后的優(yōu)化基礎工作
一般在安裝成功后,管理員確認Oracle系統(tǒng)正常啟動和關閉沒有問題后,除了要修改SYS和SYSTEM帳戶的口令外,最好還要做下面的工作:
將所有文件,特別是數(shù)據(jù)文件、控制文件幾次日志文件的設置為不可刪除的狀態(tài)。避免任何人有意無意的刪除。如果你的環(huán)境是UNIX操作系統(tǒng),建議將所有文件設置為不可刪除狀態(tài)。
在修改了SYS和SYSTEM帳戶的口令后,基本可避免任何人都可隨意窗新用戶的操作。這時,管理員自己應該在創(chuàng)建新用戶時,一定要為用戶指定默認表空間。
§2.4 Oracle
系統(tǒng)所在服務器的獨立性
由于Oracle是一個消耗資源較大的大型軟件系統(tǒng),為了確保Oracle系統(tǒng)在運行期間不與其它的軟件系統(tǒng)發(fā)生資源的競爭。建議將其它軟件系統(tǒng),包括Oracle9i的iAS軟件,不要與Oracle系統(tǒng)所在的服務上安裝這些軟件。以保證服務器資源能滿足Oracle系統(tǒng)的要求。
更多文章、技術交流、商務合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
