Oracle自動性能統計
Oracle自動性能統計
??高效診斷性能問題,需要提供完整可用的統計信息,好比醫生給病人看病的望聞問切,才能夠正確的確診,然後再開出相應的藥方。Oracle數據庫為系統、會話以及單獨的sql語句生成多種類型的累積統計信息。本文主要描述oracle性能統計涉及到的相關概念及統計對象,以更好的利用統計信息為性能調整奠定基礎。
一、性能統計信息的幾個術語
- 增量值(delta)
??性能統計信息依賴於delta值的累計,即增量值。增量值反映了在某個特定時段某個特定事件的趨勢,或者說波動的幅度。通過對比在開始期間統計的累計值和結尾處的累計值之間的差異,才能夠更清晰的了解該項值在系統不同負載時間段所需要的資源開銷以及用於定位性能瓶頸。
??在Oracle數據庫中,可以通過查詢V$SESSTAT和V$SYSSTAT來查詢統計值的累計情況。由於這2個視圖為動態性能視圖,因此,這2個視圖的數據收集的僅僅是自實例啟動以來的統計數據。如此這般,那數據庫關閉後所有的統計信息丟失腫麽辦,不用著急,有AWR來定期進行保存。
- 度量(metric)
??度量是Oracle數據庫收集的另一種統計類型。一個度量被定義為在一些累積統計信息的變化率。該速率可以對各種單元進行測量,包括時間、事務或數據庫調用。例如,每秒的數據庫調用是一個度量。度量值可以從動態性能視圖查詢獲得。其中的值是在一個相當小的時間間隔的平均值,通常為60秒。最近的度量值的歷史是在V$視圖,同時一些數據也由AWR快照進行持久化保持。
- 采樣(sampling)
??Oracle對活動會話過程中出現的相關等待進行采樣,並將這些數據收集到內存中,可以用V$視圖進行訪問,也可以將其生成報告,用於快速或者實時的定位性能問題。那這個部分就是所謂的ASH,活動會話歷史。同時這些數據由AWR快照處理也將其寫入持久存儲。
- 基線(baseline)
??有數據,能比對,才能夠真正反映問題的實質。那麽在Oracle數據庫裏邊,我們可以將其業務負載高峰期的活動會話歷史數據,更確切的說是AWR持久化的數據貼個標簽,這個標簽就是所謂的基線。因此基線就是某個特定時段業務高峰期數據庫整體性能的一個基準報告,一旦當後續數據庫出現性能問題或運行不佳的時候,通過使用基線,與性能問題期間的性能統計數據進行比對,得出兩者的差異報告,有助於問題的定位於解決。
二、系統級別性能統計
??操作系統基本性能統計提供了系統主要硬件部件的使用和性能的信息,以及操作系統本身的性能。這些信息對於檢測潛在的資源消耗,如CPU周期和物理內存,以及檢測外設性能不良,如磁盤驅動器是至關重要的。 操作系統統計是硬件和操作系統工作狀況的重要的指標。主要包括以下重要信息。
- CPU統計信息
??CPU利用率是調優過程中最重要的操作系統統計。應獲取整個系統和多處理器系統中單個CPU的利用率。每個CPU的利用率可以檢測單線程和可擴展性問題。大多數操作系統在用戶空間或內核空間顯示CPU時間開銷,這些額外的統計數據可以更好地分析CPU實際執行情況。
??在僅僅單個應用程序運行的Oracle數據庫系統中,通常情況下,該業務系統在用戶空間中運行數據庫活動。服務於數據庫的活動請求(如調度、同步、I/O、內存管理、進程/線程創建和刪除)則在內核模式(空間)下運行。在一個CPU充分利用的系統中,一個健康的Oracle數據庫在用戶空間CPU的開銷通常在運行65%到95%之間。
??可以通過查詢V$osstat視圖捕獲硬件和操作系統級別的相關信息,使得判定硬件級資源存在的問題更容易。V$sysmetric_history視圖保留主機一小時內CPU使用度量,以每一分鐘時間間隔來表示的CPU使用率。V$ sys_time_model視圖提供了有多少CPU被Oracle數據庫使用。這兩組統計數據更能夠確定Oracle數據庫或其他系統活動是否是CPU問題的原因。
- 虛擬內存統計信息
??虛擬內存統計主要用於判斷系統上是否存在大量分頁或交換活動。當大量分頁和交換時,系統性能會迅速下降。單個進程的內存統計數據可以檢測內存泄漏是否是由於某個進程釋放內存失敗而導致。
- 磁盤I/O統計信息
??I/O子系統的性能決定或影響著數據庫的性能。大多數操作系統對磁盤提供一些擴展的統計信息。最重要的磁盤統計信息是當前的響應時間和磁盤隊列的長度。這些統計數據顯示磁盤是否處於最佳狀態,或者磁盤是否正在超負荷工作。
??測量I/O系統的正常性能;取決於所使用的硬件,單個塊讀取範圍的典型值從5到20毫秒。如果硬件顯示的響應時間遠高於正常的性能值,那麽它表現不佳或超負荷工作。這就是瓶頸。如果磁盤隊列開始超過兩個,那麽磁盤是一個潛在的瓶頸系統。
??Oracle數據庫提供了一些在I/O調用時的I/O統計信息。這些統計數據在以下視圖獲取。
??v$iostat_consumer_group :
????在啟用資源計劃後,該視圖捕獲I/O相關信息,是所有資源消費群組統計。數據庫樣本統計每小時累積並將它們存儲在AWR中。
??v$iostat_file :
????該視圖是基於磁盤文件I/O的統計,主要用於以文件級別展現文件訪問頻度。
??v$iostat_function:
????該視圖是基於I/O數據庫功能(如LGWR和DBWR)的統計數據。
- 網絡統計信息
??用於確定網絡或網絡接口是否過載或沒有最佳執行。在今天的網絡應用中,網絡延遲可以是實際用戶響應時間的很大一部分。出於這個原因,這些統計是一個關鍵的調試工具。
??v$IOSTAT_NETWORK:
????該視圖提供網絡相關統計信息查詢
三、數據庫統計信息
??數據庫統計提供數據庫上的負載類型以及數據庫使用的內部和外部資源的信息。
- 等待事件
??等待事件是由服務器進程或線程遞增的統計數據,也就是說在繼續處理當前某項任務之前,它必須等待某個事件完成才能繼續處理。等待事件數據揭示了可能影響性能的問題的各種癥狀,如鎖存爭用、緩沖區爭用和I/O爭用。
??為了更好的分析不同等待事件,Oracle將等待事件進行了分類。等待事件分類包括:管理,應用程序,集群,提交,並發,配置,空閑,網絡,其他,調度,系統I/O,和用戶I/O。
?? Author : Leshami
?? Blog : http://blog.csdn.net/leshami
??下面的列表包括一些類中的等待的常見示例:
?? ??1. 應用程序:由行級鎖定或顯式鎖命令所引起的鎖等待
?? ??2. 提交:提交後等待重做日誌寫入確認
?? ??3. 空閑:表示會話不活動的等待事件,例如來自客戶端的sql*net消息
?? ??4. 網絡:等待數據通過網絡發送
?? ??5. 用戶I/O:等待塊被讀取磁盤
- 時間模型統計
?? 基於時間模型統計,主要是基於操作類型測量在數據庫中花費的時間的統計信息。最重要的時間模型統計是數據庫時間,即DB Time。數據庫時間表示在數據庫調用中所花費的總時間,是實例工作負載量的總指示器。
?? 在Oracle數控中,每個組件都有自己的統計數據。因此通過該組件與整體DB Time進行比對,可以很好地衡量這個組件的性能,或者說這個組件占據整個DB Time的百分比。如果能夠基於這些開銷過大的組件來進行調整,也即是整個DB Time開銷的時間更少。
DB Time:
??即所有花費在數據庫層面調用時間的總和,包括所有會話(前臺進程)以及非空閑等待,CPU時間等
?? DB Time 是從實例啟動以來時間的累計測量。由於DB時間是由所有非空閑用戶會話的時間組合來計算的,所以DB時間可能超過實例開始後所經過的實際時間。例如,已經運行了30分鐘的實例可能有四個活動用戶會話,其累積DB Time大約為120分鐘。
更多關於時間統計模型可以參考:Oracle Time Model Statistics(時間模型統計)
- 活動會話歷史(ASH)
??Oracle對當前數據庫活動會話,每秒進行采樣,並將其最近10次的等待信息保存到v$session_wait,同時將其歸檔到活動會話歷史表v$session_wait_history。這即是活動會話歷史(ASH)。這些數據被保留在從SGA分配的特定內存中,並且采用循環寫的方式,即采取LRU算法定期清理該部分緩存。說簡單一點,ASH采用的策略是:保存處於等待狀態的活動session的信息,每秒從v$session_wait中采樣一次,並將采樣信息保存在內存中。由於SGA中的活動會話信息存儲在循環緩沖區中,系統活動越大,可以在循環緩沖區中存儲的會話活動的秒數越小。因此這些數據就需要定期將其寫入到磁盤,那就是由MMON進程定期將部分數據寫入到AWR。AWR采用的策略是:每小時對v$active_session_history進行采樣一次,並將信息保存到磁盤中,並且保留8天(11g缺省值),8天後舊的記錄才會被覆蓋。這些采樣信息被保存在視圖wrh$_active_session_history中。而這個采樣頻率(1小時)和保留時間(8天)可以根據實際情況進行調整。
??活動會話歷史通常包括以下數據:
????SQL語句及SQLID
????用於執行sql語句的sql計劃的sql計劃標識符和哈希值
????SQL執行計劃信息
????對象編號、文件號和塊號
????等待事件標識符和參數
????會話標識符和會話序列號
????模塊和動作名稱
????會話的客戶端標識符
????服務散列標識符
????消費組標識符
- 系統和會話統計信息
??可以從V$SYSSTAT和V$SESSTAT兩個視圖獲取大量系統級別以及會話級別的統計信息。
Oracle自動性能統計