天天看點

自動性能統計資訊(一)(Automatic Performance Statistics)

    本章主要描述收集性能統計資訊,主要包括以下主題:

    ·統計資訊收集概要

    ·自動工作負載庫概覽

    ·管理自動工作負載庫

    1、統計資訊收集概要

    為了有效診斷性能問題,統計資訊必須得以通路。Oracle資料庫為系統、會話以及單個SQL語句生成許多類型的累積統計資訊。Oracle資料庫同樣跟蹤段和服務的累積統計資訊。當在這些範圍中任意一個範疇中分析一個性能問題時,你自然而然地檢視你感興趣的時間段的統計資訊(δ值)。特别的,你會檢視在一個時間段的起始與結束的時候一個統計資訊的差異。

    統計資訊的累積值通常可以通過動态性能視圖進行通路,例如V$SESSTAT,V$SYSSTAT。注意,當資料庫執行個體關閉後,動态性能視圖中的累積值将被重置。自動工作負載庫(AWR)自動為除會話級以外所有級别的統計資訊保留累積值和δ值。這個過程在有規律的時間段内被重複執行,其結果被稱為AWR快照。快照捕獲的δ值則代表着相應時間段内每個統計資訊的變化情況。

    “度量”是Oracle資料庫收集的另一種類型的統計資訊。度量被定義為某些累積統計資訊改變的比率。比率可以用一系列機關來衡量,包括時間,事務或資料庫調用。例如,每秒鐘資料庫調用次數就是一個度量。路徑成本可以從一些V$視圖中找到,在這些V$視圖中的路徑成本是一段非常小的時間間隔内的平均值,典型的如60s。路徑成本最近一段時間内的值可以通過V$視圖擷取,其中的一些資料同時也被AWR快照保留。

    Oracle收集的統計資訊資料的第三種類型是采樣資料。ASH采樣器執行采樣。ASH采樣所有活動會話的目前狀态。資料庫将收集的資料放在記憶體中,你可以通過V$視圖進行通路。拍攝AWR快照的時候同樣将其寫入永久存儲中。

    診斷性能問題的一個有力工具是統計資訊基線(baseline)的使用。統計資訊基線是系統在負載高峰仍正常運作的時間段采集的統計資訊等級(statistic rates)。通過将性能低下時段捕獲的統計資訊與所選擇的基線對比,那些變化顯著的地方很有可能就是問題的根源。

    AWR通過指定并儲存一對AWR快照作為基線以支援捕獲基線資料。仔細考慮你選擇作為基線的時段;基線應該是系統負載高峰的一個良好展現。在将來,你可以将性能不佳的時段捕獲的快照與這些基線做比較。

    OEM是推薦的用來觀察動态性能視圖中的實時資料和AWR曆史表格中的曆史資料的工具。OEM同樣可以用作捕獲與AWR資料相關的作業系統和網絡統計資訊資料。

    1.1 資料庫統計資訊

    資料庫統計資訊提供了資料庫負載類型的資訊和資料庫使用的内部和外部資源的資訊。本節描述一些重要的統計資訊。

    1.1.1 等待事件

    等待事件是這樣一類統計資訊:它由伺服器程序或線程引起,通常意味着一個程序或線程在繼續處理“事情”之前必須等待某一個事件的完成。等待事件揭露了各種各樣的可能影響性能的問題的症狀,例如,闩的争用,緩沖區的争用,以及I/O的争用。

     為了簡化等待事件的深入分析,等待事件被分類。類型包括:管理類(administrative)、應用類(application)、叢集類(cluster)、送出類(commit)、并發類(concurrency)、配置類(configuration)、空閑類(idle)、網絡類(network)、其它(other)、排程任務(scheduler)、系統I/O(system I/O)、使用者I/O(user I/O)。

    等待事件的分類基于一個共同的解決等待事件相應問題的的方案。例如,獨占TX鎖通常屬于應用類等待事件而HW鎖通常屬于配置類等待事件。

    下表包含了常見的類型的等待事件:

    應用類:行級鎖或顯式鎖指令引起的鎖等待

    送出類:送出事務後等待重做日志寫好的确認

    空閑類:辨別會話不活躍的等待事件,例如:SQL*Net message from client

    網絡類:等待通過網絡傳輸的資料

    使用者I/O類:等待從磁盤讀取資料塊

     執行個體的等待事件統計資訊包括前台和背景程序的統計資訊。因為你一般會聚焦于調優前台活動,在相關的V$視圖上,整個執行個體活動分為前台和背景統計資訊,以便調優。

     V$SYSTEM_EVENT視圖展示了執行個體前台活動和執行個體的統計資訊資料。V$SYSTEM_WAIT_CLASS視圖展示了前台和等待事件資訊聚合成等待事件類型後的資訊。V$SESSION_EVENT和V$SESSION_WAIT_CLASS展示了會話級别的等待事件和等待類型的統計資訊。

      1.1.2 時間模型統計資訊

     當調優Oracle資料庫時,每一個資料庫的元件都有其自身的統計資訊。為了将系統作為一個整體來看待,擁有一個普遍的衡量尺度很必要。是以,大部分Oracle資料庫報告從時間尺度來描述統計資訊。此外,V$SESS_TIME_MODEL 和 V$SYS_TIME_MODEL視圖提供了時間模型統計資訊。使用這個普遍的時間度量可以幫助量化對資料庫操作的影響。

     時間模型統計資料中最重要的是DB time。這個統計資訊代表了花在資料庫調用的總時間,并且是一個執行個體總體負載的一個導向标。它是所有會話的CPU時間與等待時間,不包括空閑等待事件(非空閑使用者會話)的總和。

     DB time從執行個體啟動時開始累積。因為DB time是通過綜合所有非空閑使用者會話的時間來計算的,是以存在DB time超過執行個體啟動後實際流逝的時間。例如,一個執行個體運作了30分鐘,有4個活躍的會話那麼其DB time的值将近120分鐘。

     調優Oracle系統的目标可以以減少使用者花在執行某些資料庫操作上的時間為起點,或者簡單地減少DB time。其它時間模型統計資訊提供了某些操作在時間尺度上的量化效果,例如登入操作、硬解析和軟解析。

     1.1.3 Active session history

     V$ACTIVE_SESSION_HISTORY視圖提供了執行個體的會話活動采樣。Active sessions每秒采樣一次,并存儲在sga中的一個循環緩沖區。任何連結到資料庫的、等待非空閑類等待事件的會話都可以看作一個Active session。這包括了采樣時CPU上的所有會話。

     每個會話采樣是一系列行,V$ACTIVE_SESSION_HISTORY視圖會在每次采用中為每一個會話傳回一行。最近的會話采樣的行将最先傳回。因為Active session存儲在sga中的循環緩沖區,系統活動量(activity)越大,會話活動資訊存儲在循環緩沖區的時間就越短。這就意味着V$視圖中的會話采樣,或者說會話活動存儲在V$視圖中的時間,完全依賴于資料庫的活躍性。

     作為AWR快照的一部分,V$ACTIVE_SESSION_HISTORY的内容同樣也被記錄到了磁盤中。因為在系統活動很多的時候該V$視圖會産生大量的資料,是以通常隻有一部分會話采樣被寫入磁盤。

     通過僅捕獲活躍的會話,一系列可管理的資料以與工作直接相關的大小而不是系統允許的所有的會話的形式表現出來。使用ASH使你可以檢查并執行對存在于V$ACTIVE_SESSION_HISTORY視圖的目前資料與存在于DBA_HIST_ACTIVE_SESS_HISTORY視圖的曆史資料進行詳盡的分析,這樣避免了為了重制負載而收集額外的性能跟蹤資訊。ASH同時包含了捕獲的每條SQL語句的執行計劃資訊。你可以通過這個資訊找出哪條SQL語句占用了最多的SQL Elapsed time。ASH中的資訊可以從多個角度來收集,包括:

    ·SQL語句的SQL辨別符

    ·執行SQL語句的SQL執行計劃辨別符和SQL執行計劃的哈希值

    ·SQL執行計劃的資訊

    ·對象編号、檔案号、塊号

    ·等待事件辨別符和參數

     ·會話辨別符和會話系列号

     ·子產品和動作名

     ·會話的用戶端辨別符

     ·使用者組号

    你可以收集指定的時間段内的ASH資訊到報告中。

    Active session history采樣同樣适用于Active dg 實體standby執行個體以及Oracle ASM執行個體。在這些執行個體中,目前會話活動被收集和呈現在V$ACTIVE_SESSION_HISTORY視圖中,但是不寫入到磁盤中。

    1.1.4 系統和會話統計資訊

    通過V$SYSSTAT和V$SESSTAT視圖可以通路大量的系統和會話級别的累積的資料庫統計資訊。

    1.2 作業系統統計資訊    

    作業系統統計資訊提供了關于系統主要硬體元件的用量和性能資訊,以及作業系統本身的性能。這類資訊對于監控潛在的資源緊張很關鍵,例如CPU周期和實體記憶體,對于監控外圍裝置性能低下也很關鍵,例如磁盤驅動。

    作業系統統計資訊是硬體和作業系統如何工作的一個訓示。許多系統分析師通過安裝更多的硬體來應對硬體資源短缺。這是對作業系統統計資訊顯示出來的一系列症狀的比較保守的措施。最好的做法是将作業系統統計資訊作為一個診斷工具,就像醫生在診斷時使用體溫計、脈搏率、病人的疼痛等作為判斷的依據一樣。為了更好的确定瓶頸,應當收集系統上所有要進行性能診斷的伺服器的作業系統統計資訊。

    作業系統統計資訊包括下列類型:

    ·CPU統計資訊

    ·虛拟記憶體統計資訊

    ·磁盤I/O統計資訊

    ·網絡統計資訊

    1.2.1 CPU統計資訊

    CPU使用率在調優過程中是最重要的作業系統統計資訊。需要獲得整個系統的CPU使用率以及在多處理器環境中單個CPU的使用率。單個CPU的使用率可以用來探測單線程和可擴充性問題。

    大部分作業系統以消耗在使用者空間或模式與核心空間或模式的形式來報告CPU使用率。這些額外的統計資訊使得我們可以更好地分析到底CPU在被什麼占用。

    在一個運作Oracle資料庫的系統上,并且隻有資料庫一個應用運作着,系統将運作資料庫的活動歸為使用者空間中。服務于資料庫請求的活動(例如排程程式,同步,I/O,記憶體管理,程序/線程的建立與撤銷)則運作在核心模式。在CPU滿負荷運作的系統上,一個健康的Oracle資料庫的運作通常占用65%——95%的使用者空間。

    V$OSSTAT視圖捕獲資料庫中機器級别的資訊,這有助于你确定是否存在硬體級别的資源問題。V$SYSMETRIC_HISTORY視圖顯示列一個小時内的主機CPU使用率路徑成本,每隔一分鐘顯示一次CPU使用率的百分比值。V$SYS_TIME_MODEL視圖提供了Oracle資料庫的CPU使用率的統計資訊。使用這些統計資訊可以幫助你确定是Oracle資料庫還是其它系統活動造成了CPU的問題。

    1.2.2 虛拟記憶體統計資訊

    虛拟記憶體統計資訊主要被用來作為确認系統中隻有少量paging或swapping活動的檢查手段。當paging或swapping發生時,系統性能會迅速下降并且無法預估下降的程度。

    單個程序記憶體統計資訊可以檢測由于程式無法回收程序堆占用的記憶體而導緻的記憶體洩漏。這些統計資訊對于确認在系統開機後達到一個穩定的狀态時記憶體使用率沒有增加十分必要。這個問題在位于中間層計算機的共享伺服器上尤為突出,該層的會話可能處于持續地和使用者互動的狀态,會話完成但是沒有完全回收。

    1.2.3 磁盤I/O統計資料

    因為資料庫駐留在一系列磁盤上,是以I/O子系統的性能對于資料庫的性能來說尤為重要。大多數作業系統提供了大量關于磁盤性能的統計資訊。最重要的磁盤統計資訊是目前相應時間和磁盤隊列的長度。這些統計資訊顯示了磁盤是否運作良好或者磁盤是否負載過重。

    觀測I/O系統的正常性能,單塊讀取的典型值一般在5——20毫秒之間,取決于硬體的使用。如果硬體的響應時間遠遠高于正常性能的值,那麼說明性能很差或者過載。這是你的系統瓶頸。如果磁盤隊列開始超過2,那麼這個磁盤是潛在的系統瓶頸。

    Oracle資料庫同樣為資料庫自身産生的I/O調用收集連續的I/O統計資訊。在下面這些次元中,這些統計資訊包括單塊讀、多塊讀和寫操作:

    ·消費組:

    當Oracle資料庫資料總管啟用,V$IOSTAT_CONSUMER_GROUP視圖會捕獲屬于目前可用資源計劃一部分的所有消費組的I/O統計資訊。資料庫每個小時采集累積統計資訊并将其作為曆史統計資訊儲存在AWR中。

    ·資料庫檔案

    資料庫檔案的I/O統計資訊可以通過通路V$IOSTAT_FILE視圖。

    ·資料庫功能

    資料庫功能(例如LGWR和DBWR)的I/O統計資訊可以通過V$IOSTAT_FUNCTION視圖擷取。

    1.2.4 網絡統計資訊

    你可以像使用磁盤統計資訊一樣來使用網絡統計資訊以确定網絡或網絡接口是正常運作還是過載。在今天的網絡應用中,網絡潛在因素是實際使用者響應時間的一個重要組成部分。因為這個原因,這些統計資訊是一個至關重要的debug工具。

    Oracle資料庫在V$IOSTAT_NETWORK視圖中維護着一組網絡I/O統計資訊。

    1.2.5 作業系統資料采集工具

    下表列出UNIX上各種采集作業系統統計資訊的工具,至于Windows,使用性能螢幕工具。

Component

UNIX Tool

CPU

sar, vmstat, mpstat, iostat

Memory

sar, vmstat

Disk

sar, iostat

Network

netstat

    1.3 破譯統計資訊

     當一開始研究性能資料,你可以通過研究你的統計資訊來得出初步結論。一個确認你對統計資訊的解譯是正确的方法是交叉驗證其它統計資訊。這可以确認一個統計資訊或事件是否是真的目标。同時,因為前台活動是可調整的,在分析背景統計資訊之前最好先分析前台活動的統計資訊。

     一些常見陷阱在下面章節将進行讨論:

     ·命中率

     當進行調優的時候,常見的一個做法就是計算一下比率來确定是否存在問題。這樣的比率包括buffer cache命中率,軟解析命中率,還有闩命中率。不要将這些比率作為确定是否存在性能瓶頸的決定性因素。相反的,将它們作為參考因素。為了鑒别是否存在性能瓶頸,需要進一步檢查其它相關的資訊。

     ·等待事件及實時統計資訊

     在執行個體級别将參數TIMED_STATISTICS設定為true,除了available wait counts以外,可以讓資料庫為等待事件收集等待的時間。這個資料庫對于比較一個事件總的等待時間與資料收集之間總的流逝時間非常有用。例如,如果一個等待事件在兩個小時的時段内一共占用了30s,那麼對于深入這個事件幾乎沒什麼作用,盡管這個等待事件可能按等待時間排序排在第一。然而,如果這個事件在45分鐘的時段内占了30分鐘,那麼這個等待事件就值得進一步深入。

     注:如果初始化參數STATISTICS_LEVEL設定為true或者typical,那麼資料庫會自動收集實時統計資訊。如果STATISTICS_LEVEL設定為BASIC,那麼你必須将TIMED_STATISTICS設定為ture來收集實時統計資訊。需要注意的是将STATISTICS_LEVEL設定為BASIC會禁用許多自動化的特性,是以不建議這麼做。

    如果你顯示設定了DB_CACHE_ADVICE, TIMED_STATISTICS, 或 TIMED_OS_STATISTICS,或者在pfile中指定了對應的值,或者使用了alter system或alter session語句,那麼這些顯示設定的值會覆寫掉由STATISTICS_LEVEL衍生的參數值。

     ·将Oracle資料庫統計資訊與其它因素比較

     當檢視統計資訊的時候,将一些會影響統計資訊是否有價值的因素考慮在内是重要的。這些因素包括使用者負載和硬體性能。如果你在一個主機硬體是64節點的計算上,系統上有2000個使用者,那麼就算在45分鐘内有30分鐘都在等待一個事件也不見得就是系統存在問題的暗示。

    ·沒有實時統計資訊的等待事件

     如果TIMED_STATISTICS為false,那麼一個事件的總的等待時間是不知道的。是以,這個時候隻能按等待事件等待的次數來進行排序。盡管等待次數最多的等待事件可能暗示着潛在的性能瓶頸,但它們可能不是主要的性能瓶頸。存在這樣一種情況,一個事件有着相當大的請求次數,但是等待時間卻很小。這種情況的對立面同樣存在:一個事件隻有很少的等待次數,但是等待時間卻占據了總時間相當大的一部分。沒有等待時間來做對比,很難确定一個等待事件究竟是不是問題所在。

     ·空閑等待事件

     Oracle資料庫使用一些等待事件來表示一些Oracle伺服器程序是否處于空閑狀态。一般來說,這些等待事件對于診斷性能問題沒有任何價值,在檢查等待事件的時候 應将它們排除在外。

     ·計算類統計資訊

     當解譯計算類統計資訊(例如rates,标準化後的事務統計資訊,ratios),将計算統計資訊與實際統計資訊數目進行交叉驗證十分重要。這确認了衍生的比率是否真的是問題所在:小的統計資訊加起來通常會讓一個不同尋常的比率大打折扣。例如,在初始的檢查中,軟解析的比率達到50% ,這通常是一個潛在的調優的區域。如果,然而,在資料收集的間隔内僅有一個硬解析和一個軟解析,這樣軟解析的比率就将是50%,盡管統計資訊統計出來顯示這不是一個值得關注的區域。在這種情況下,因為原始統計資訊數目太少,比率此時就不是問題所在。

     2、AWR概覽

    見《自動性能統計資訊(二)》