2.1 Oracle性能提升方法
Oracle性能方法論幫助你在Oracle數據庫中識別性能問題,包括識別瓶頸和修復它們。建議只有在已經確認存在一個瓶頸時才可以做出相應的改變。
性能提升是一個迭代的過程。因為解決掉一個瓶頸可能不會立即讓性能得到提升,可能會發現另一個瓶頸。另外,在一些情況下,如果串行點移動到另一個更低效的組件那里,那么性能甚至會降低。
性能問題一般表現為吞吐量不足,或者用戶/任務的響應時間不可接受,或者二者兼具。而問題可能位于應用程序模塊之中或者存在于整個系統中。在查看任何數據庫或者操作系統統計信息前,得到系統最重要的用戶反饋是最重要的。這里的“最重要的用戶”是指系統用戶或者最終為應用程序付費的人。典型的用戶反饋可能包括下面這些話:
“在線系統太慢了,以至于它讓我的員工根本無法工作。”
“賬單的產生實在太慢了。”
“當我面對巨大的網絡流量時,響應時間不能接受,我丟失了客戶。”
“現在我們一天會完成500筆生意,系統已經用到最大限度了,下個月會讓所有用戶開始使用我們的產品,用戶量會增加到4倍。”
……
從這些坦率的反饋中,很容易看出用戶認為什么才是決定性能的最重要指標。確定好這個性能指標和終止調優過程的標準,可以讓性能過程的管理更簡單,而且在每個層面上都更成功。
這些重要的性能指標最好以真實的業務目標來定義,而不是以系統的統計數據來定義。
對于真實的業務目標,以典型的用戶語言來說可能是:
賬單系統必須在3小時內可以處理100萬個賬戶。
在網站峰值期間,刷新一個頁面一定不要超過5秒。
系統必須能夠在8小時內處理25000筆生意。
終極的成功是用戶對系統性能的認可。性能工程師的角色就是要消除任何讓性能降低的瓶頸,這些瓶頸可能是由于低效地使用了有限的共享資源或者濫用了共享資源引起的,這引起了串行化。由于共享資源是有限的,性能工程師的目標就是要高效地使用共享資源,并使系統可以處理的業務量達到最大化。在一個很高的層面上,整個數據庫就是一個共享的資源。相應的,在較低層次上,一個CPU或者一個磁盤也可以被看成一個共享的資源。
你可以不斷循環地使用Oracle性能提升方法,直到達到性能目標,或者確認目標根本不可能達到。這個過程是高度迭代的。有時,某些調查對改善系統性能可能只有很小的幫助或者根本沒有任何幫助。要想能夠精準、快速地發現系統最嚴重的瓶頸,時間和經驗都是必要的。但是,對于某些有經驗的性能工程師來說,經驗優先的原則可能導致他們忽略一些有價值的數據和統計結果。這類行為更傾向于通過神話和傳說來調優。這是非常危險的、昂貴的、不會成功的數據庫調優方法。
自動化數據庫診斷監視器(ADDM)使用一些性能提升方法,并為主要的性能問題的自動診斷提供分析和統計功能。使用ADDM,能大幅縮短提升系統性能所需要的時間。對于ADDM的描述,請參考第7章中的 “自動化的性能診斷”。
系統是如此的不同和復雜,以至于找到有力且快速的規則是不可能的。本質上,Oracle性能提升方法只是定義了一個工作方向,而不是一堆最終的規則。最棒的性能工程師會利用系統提供的數據和靈活的思考來確定每個具體的性能問題。
2.1.1 Oracle性能提升方法的步驟
(1)做如下常規檢查。
① 從用戶那里得到坦率的反饋。確定性能項目的工作范圍,以及后續的性能目標。這個過程對將來做性能計劃是非常關鍵的。
② 得到系統中的操作系統、數據庫和應用程序在性能良好和性能糟糕時的完整的統計信息。如果不能全部得到,那就盡量得到可以得到的統計信息。丟失統計信息就像在犯罪現場丟失證據一樣,這使得偵測工作更難、更耗時。
③ 檢查所有與用戶性能相關的計算機的操作系統。通過檢查操作系統,可以找到那些被耗盡的硬件資源和系統資源。請列出任何被過度使用的資源以作為癥狀,等待今后的進一步分析。另外,檢查所有硬件是否都沒有報錯信息。
(2)在當前系統中檢查Oracle常見的10大錯誤,如果發現問題就將其列出來作為今后分析的癥狀。這是因為它們是最可能出現的問題。Oracle ADDM可以對這10個問題中的9個進行自動報告。請看第7章中的“自動化的性能診斷”,以及本章中的“Oracle系統中最常發生的10大錯誤”。
(3)使用癥狀作為線索建立一個模型,用以模擬系統中正在發生的事情,以此來了解是什么原因導致了性能問題。請看本章中的“性能概念建模的決策過程”。
(4)準備一系列補救措施,并對措施的效果進行預估,然后將這些措施以對系統最適合的順序應用于系統。ADDM的每個建議都帶有相應的效果說明。在性能工作中一個黃金定律就是一次只改變一件事情,然后測試改變前后的區別。然而,遺憾的是,系統宕機時間必須越短越好,這不允許進行特別縝密的調查。所以,如果不得不同時實施多個改變,那么試著確保它們是相互隔離互不影響的,以便于獨立驗證每個改變的效果。
(5)確認實施的改變是否已經產生了期望的效果,并且看看用戶的接受程度是否提高。如果效果不佳,就得找到更多的瓶頸,并且不斷地完善模型,直到你對應用程序的理解變得更精確。
(6)重復后3步,直到性能目標被達到,或者由于一些其他的限制達到性能目標變得不可能。
這個方法可以識別最大的瓶頸,其焦點在于通過提高應用程序的效率和消除資源的短缺,讓性能大幅提升。在這個過程中,估計只能從針對實例的調整中得到很少的性能提升(小于10%),而巨大的性能提升則來自于針對低效的應用程序的調整。