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

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