程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> 可預見的Oracle應用程序的性能調優

可預見的Oracle應用程序的性能調優

編輯:Oracle數據庫基礎

這篇技巧性文章是由“國際Oracle用戶組”(IOUG)提供的,它是一個由用戶組成的組織,這個組織通過提供高質量的信息、培訓、網絡和支持,來提高Oracle數據庫專家和數據庫開發者的水平。這篇文章摘自由David Welch所寫的論文《可預見的Oracle應用程序性能調優》。點擊這裡成為“國際Oracle用戶組”的一員,從而獲得成千上萬的由Oracle用戶寫的技巧性文章和科技文獻。

引言

我們見到過很多帶有巨大性能問題的Oracle應用程序和電子商務套件安裝。我們得出的結論是:這些安裝都可以在性能方面取得進一步的提升。換句話說,性能已經很高,幾乎不能得到再得到改善的安裝是很少見的。

有爭議的問題

針對產品系統堆棧而言,我們的底部端對端性能調優方法總是很快產生成果,比我們認為的遵循廣泛的備忘列表要快。我提出以下一些問題共討論:

大部分性能改善的可能性都是在應用程序級上:這條結論來自Metalink上關於性能調優的一個顯著的注釋。這條結論和我們的經驗性能調優系統堆棧沒有統計意義上的關系。

平均需要兩天的時間:這是書上做出的結論。但我們的經驗不支持這個結論。我認為得出一個Oracle應用程序性能改善的策略最少應該需要12天。第一天早晨開會是很常見的事。最後兩天主要用來完成行政方面和技術級上的有關發現、勝利和緊接著的推薦的文檔工作。可以誇張地說,如果一個性能改善不被記錄下來形成文檔,那麼以後很難再重復類似的性能改善。如果對出現的問題不記錄下來形成文檔,那麼很可能它會再次發生。如果一個問題及其解決方法不被記錄下來形成文檔的話,對它的監測將非常困難。

擴展碎片:對於聯機事務處理系統,這應該不是一個問題。我們聽過很多有關“聯機事務處理系統”對碎片嚴重的表(這些表完全是鍵值惟一的)進行事務處理不會影響性能的說法。但是,我們應該經常性地重組以消除碎片,這會帶來性能上的巨大改善。Oracle存儲管理改善正在向將碎片帶來的影響最小化大踏步地邁進。

由於緩沖輸入輸出不是大問題,所以需要對磁盤輸入輸出進行性能調優:這裡有兩點需要說明。磁盤輸入輸出的實際開銷並不是內存緩沖輸入輸出的一萬倍。真實的比值接近70。即使你的CPU似乎正在抵銷這個代價,並且不帶來任何顯著的性能問題,但是這個問題顯然會限制你的系統的可伸縮性。隨著時間的流逝,我們越來越重視過高的內存緩沖輸入輸出,同時找尋性能改善的機會。

OATablespace模型和遷移工具集:已發布的Metalink注釋(10/03)聲稱“這個新模型帶來了實時性能改善。”這個模型的概念是將100多個Oracle應用程序表空間合並成一個以10計數的表空間。這會帶來潛在的存儲空間節省麼?或許。這會帶來更高的操作效率麼?它依賴於其他東西。我們還沒有講解這個工具集。但是我們已經理解了在白板級上的表空間合並是如何改善性能的。

對你的個人電腦客戶端進行磁盤碎片整理:在這本書中有關這個問題的討論很多。這或許是正確的,因為在寫作本書時正流行“胖客戶端”。但是現在,Oracle應用程序客戶端是一個“瘦客戶端”(從Oracle廢除Jinitiator開始,我們稱浏覽器為瘦客戶端),不要期待能從對你的個人電腦客戶端硬盤驅動器進行磁盤碎片整理中得到性能提升。

載入模塊補丁:這是Oracle技術支持對於性能問題經常給出的對策,其實在很多情況下,它並不合適。原因是打補丁經常會帶來不穩定性。如果對於補丁的依賴性沒有給予充分考慮,你可能會發現你不得不載入整個補丁包,而你根本就沒打算載入它們,結果就是對你系統的堆棧穩定性產生了影響。

項目管理

項目管理是很關鍵的。Oracle應用程序性能實施即是技術上的也是行政上的。某個人必須出來做掌舵者,即項目管理者。必須按功能區分出不同的優先次序。如果有可能,可以按照以下方式:商業單位先計算他們選拔人才的時間延遲帶來的財政開支,然後乘上用戶的數量及其每分鐘的收入。獲得應用程序性能改善的開銷之一就是要記錄文檔。同時,也需要記錄大量的紙質文檔。用戶的欲望必須被管理起來,因為並不是所有的區域都會產生同樣戲劇性的結果。必須有一個管理者來劃分不同的優先次序,有些時候甚至需要對性能團隊的訪問進行過濾。一方面,用戶會頻繁地提出會導致底層性能問題的主意和要求。另一方面,和用戶進行交互可能會妨礙你的工作進度。成功也會導致暴露下一層性能問題的出現。

這篇技巧性文章是由“國際Oracle用戶組”(IOUG)提供的,它是一個由用戶組成的組織,這個組織通過提供高質量的信息、培訓、網絡和支持,來提高Oracle數據庫專家和數據庫開發者的水平。這篇文章摘自由David Welch所寫的論文《可預見的Oracle應用程序性能調優》。點擊這裡成為“國際Oracle用戶組”的一員,從而獲得成千上萬的由Oracle用戶寫的技巧性文章和科技文獻。

引言

我們見到過很多帶有巨大性能問題的Oracle應用程序和電子商務套件安裝。我們得出的結論是:這些安裝都可以在性能方面取得進一步的提升。換句話說,性能已經很高,幾乎不能得到再得到改善的安裝是很少見的。

有爭議的問題

針對產品系統堆棧而言,我們的底部端對端性能調優方法總是很快產生成果,比我們認為的遵循廣泛的備忘列表要快。我提出以下一些問題共討論:

大部分性能改善的可能性都是在應用程序級上:這條結論來自Metalink上關於性能調優的一個顯著的注釋。這條結論和我們的經驗性能調優系統堆棧沒有統計意義上的關系。

平均需要兩天的時間:這是書上做出的結論。但我們的經驗不支持這個結論。我認為得出一個Oracle應用程序性能改善的策略最少應該需要12天。第一天早晨開會是很常見的事。最後兩天主要用來完成行政方面和技術級上的有關發現、勝利和緊接著的推薦的文檔工作。可以誇張地說,如果一個性能改善不被記錄下來形成文檔,那麼以後很難再重復類似的性能改善。如果對出現的問題不記錄下來形成文檔,那麼很可能它會再次發生。如果一個問題及其解決方法不被記錄下來形成文檔的話,對它的監測將非常困難。

擴展碎片:對於聯機事務處理系統,這應該不是一個問題。我們聽過很多有關“聯機事務處理系統”對碎片嚴重的表(這些表完全是鍵值惟一的)進行事務處理不會影響性能的說法。但是,我們應該經常性地重組以消除碎片,這會帶來性能上的巨大改善。Oracle存儲管理改善正在向將碎片帶來的影響最小化大踏步地邁進。

由於緩沖輸入輸出不是大問題,所以需要對磁盤輸入輸出進行性能調優:這裡有兩點需要說明。磁盤輸入輸出的實際開銷並不是內存緩沖輸入輸出的一萬倍。真實的比值接近70。即使你的CPU似乎正在抵銷這個代價,並且不帶來任何顯著的性能問題,但是這個問題顯然會限制你的系統的可伸縮性。隨著時間的流逝,我們越來越重視過高的內存緩沖輸入輸出,同時找尋性能改善的機會。

OATablespace模型和遷移工具集:已發布的Metalink注釋(10/03)聲稱“這個新模型帶來了實時性能改善。”這個模型的概念是將100多個Oracle應用程序表空間合並成一個以10計數的表空間。這會帶來潛在的存儲空間節省麼?或許。這會帶來更高的操作效率麼?它依賴於其他東西。我們還沒有講解這個工具集。但是我們已經理解了在白板級上的表空間合並是如何改善性能的。

對你的個人電腦客戶端進行磁盤碎片整理:在這本書中有關這個問題的討論很多。這或許是正確的,因為在寫作本書時正流行“胖客戶端”。但是現在,Oracle應用程序客戶端是一個“瘦客戶端”(從Oracle廢除Jinitiator開始,我們稱浏覽器為瘦客戶端),不要期待能從對你的個人電腦客戶端硬盤驅動器進行磁盤碎片整理中得到性能提升。

載入模塊補丁:這是Oracle技術支持對於性能問題經常給出的對策,其實在很多情況下,它並不合適。原因是打補丁經常會帶來不穩定性。如果對於補丁的依賴性沒有給予充分考慮,你可能會發現你不得不載入整個補丁包,而你根本就沒打算載入它們,結果就是對你系統的堆棧穩定性產生了影響。

項目管理

項目管理是很關鍵的。Oracle應用程序性能實施即是技術上的也是行政上的。某個人必須出來做掌舵者,即項目管理者。必須按功能區分出不同的優先次序。如果有可能,可以按照以下方式:商業單位先計算他們選拔人才的時間延遲帶來的財政開支,然後乘上用戶的數量及其每分鐘的收入。獲得應用程序性能改善的開銷之一就是要記錄文檔。同時,也需要記錄大量的紙質文檔。用戶的欲望必須被管理起來,因為並不是所有的區域都會產生同樣戲劇性的結果。必須有一個管理者來劃分不同的優先次序,有些時候甚至需要對性能團隊的訪問進行過濾。一方面,用戶會頻繁地提出會導致底層性能問題的主意和要求。另一方面,和用戶進行交互可能會妨礙你的工作進度。成功也會導致暴露下一層性能問題的出現。

什麼是用戶不能告訴你的

針對某個用戶的從底向上的方法揭示了一個單獨的包消耗的輸入輸出資源占全部的25%左右。對另一個用戶而言,一個單獨的查詢可能會引起每周4.3TB的緩沖輸入輸出。性能調優使得緩沖開銷降至原先的0.06%。問題是它會耗盡CPU資源,同時,在那種情況下,是否對CPU進行擴充還需慎重考慮。沒有人知道系統堆棧正在抵銷這個代價。

關於性能調優保守最嚴密的一個秘密在Oracle性能調優指南中被發現的。作為一個團隊,我們發現這個秘密已經多年了。對於beta級或產品系統的性能問題,你應該從系統的最底層堆棧開始診斷。不幸的是,性能診斷經常僅僅集中在系統堆棧中間的四個部分。它們是:

* 邏輯數據庫結構

* 數據庫操作

* 訪問路徑(SQL)

* 內存分配

但是,我們經常可以在Oracle底層的幾個級別上發現很大的性能問題,如下所示:

* 輸入輸出和物理數據庫結構

* 資源競爭

* 底層操作系統平台

藏寶圖

在Oracle性能調優級上,藏寶圖就是v$sqlarea視圖。如果我是一個IT管理者,我將會記住這個視圖的名字。並且,每當我在大廳遇見我的數據庫管理員時,我都會問他們這周他們查詢這個視圖的次數。

Metalink 注釋 235146.1給出了對這個視圖進行查詢的一些樣例。例如:

select sql_text, executions, buffer_gets, disk_reads, rows_processed,

sorts, address, first_load_time, HASH_VALUE, module

from v$sqlarea

where executions > 0

order by reads_per desc

最近,越來越多的Oracle 9i版本加入了模塊(MODULE)這個列,該列揭示了Oracle應用程序的模塊名稱。

統計包

在很多大型企業中,統計包的使用仍然被忽視。這可能是帶有脅迫性的報道。不要犯試圖僅僅讀取輸出結果,就能獲取所有信息的錯誤,即使是第一頁就足以告訴你這份報道中剩下的你應該重視的10%在哪兒。Oracle 9.2版本的統計包,現在包含CPU和消耗時間列。以前,為了將長時間運行的SQL語句排序到最頂端,我們不得不開啟“追蹤”,連接追蹤文件,並將它們交付程序tkprof來處理。對於那些一個簡單的“追蹤”就要處理多達10GB數據的大型企業而言,這是不現實的。

讓用戶參與到性能調優中去

將這條建議(即,讓用戶參與到性能調優中去)寫入書中的人應該因其創造性而得到贊譽。讓你的用戶也參與到性能診斷中去。購買一台Oracle應用程序評測個人電腦,並把它給用戶使用。不要使用與個人電腦類似的配置好的筆記本,因為在同樣規范的情況下,筆記本沒有個人電腦的同樣性能特性。配置清單如下:

* 750 MB CPU

* 256 MB 內存

* Windows 2000 企業版(第四版)

* 使用獨立的邏輯磁盤

* Jinitiator-鎖定版

* 標准軟件,例如Office 2003

供評測用的個人電腦不需要以下配置:

* 牆紙

* 屏幕截圖

* 工具條

* 常駐程序

將評測用個人電腦送上用戶的桌面,帶著性能問題。將用戶的電腦接入局域網,讓用戶工作一段時間。然後,再將用戶的電腦放進計算機房間,並把它接入中間層,讓用戶在它上面進行更多的工作。評測用個人電腦消除了用戶方對Oracle應用程序性能的主觀性,同時也消除了面對用戶抱怨性能問題你們的主觀性。

索引計數和性能

回到70年代,開發者指南基本上說不要在一個表上建立4到5個索引。今天,開發者指南上的注釋如下:

Oracle不限制在一個表上建立索引的個數。盡管如此,你需要考慮索引所帶來的性能改善,以及你的數據庫應用程序的實際需要,從而決定需要對哪些列建立索引。

事實是:每個Oracle應用程序表可能包含30多個索引。如果我們加入一個索引能將經常需要的SQL語句的輸入輸出減少,我們會不考慮高索引計數的問題而加入這個索引。

CPU

減小並發管理池的寬度,至今我們還沒發現這會阻塞任務的進行。我們經常會看到的情景是:減小並發管理池的寬度實際上增加了批處理任務的吞吐量,它也使CPU不那麼忙碌。有許多包含對等進程的任務必須被完成。如果一個任務的池寬度過窄,所需的任務可能永遠也得不到處理,從而阻塞整體任務。

我們和Oracle應用程序安裝小組、培訓者打過交道,他們喜歡增加並發管理池的寬度,而無視對CPU的影響,這種設置一直保持到產品發布時仍然存在。在訓練和測試環境中,安全問題的大門是開著的,並且安裝者增加並發管理池的寬度以期望他們的批處理任務可以盡早完成。他們這樣做或許根本沒有考慮到對CPU的影響,CPU可能會因此而被完全占用。

CPU運行隊列不應該比你的CPU計數的兩倍還深。如果CPU在一天中被經常性完全占用,就必須放棄某些設置。尋找這個需要被放棄的設置的第一位置就應該是並發管理池。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved