天天看點

oracle ash介紹,循序漸進Oracle - 全面認識Oracle ASH

從Oracle 10g開始,Oracle引入了ASH新特性,也就是活動Session曆史資訊記錄(Active Session History,ASH)。如果說v$session_wait_history是一小步,那麼ASH則是Oracle邁出根本變革的一大步。

本文節選自一、ASH概述

ASH以v$session為基礎,每秒鐘采樣一次,記錄活動會話等待的事件。因為記錄所有會話的活動是非常昂貴的,是以不活動的會話不會被采樣,這一點從ASH的“A”上就可以看出。采樣工作由Oracle 10g新引入的一個背景程序MMNL來完成。

是否啟用ASH功能,受一個内部隐含參數控制:

oracle ash介紹,循序漸進Oracle - 全面認識Oracle ASH

而采樣時間同樣由另一個内部隐含參數決定:

oracle ash介紹,循序漸進Oracle - 全面認識Oracle ASH

1000毫秒正好是一秒的時間。此處引用的腳本GetHparDes.sql内容如下:SELECT x.ksppinm NAME, y.ksppstvl VALUE,

x.ksppdesc describ

FROM

SYS.x$ksppi x, SYS.x$ksppcv y

WHERE

x.inst_id = USERENV ('Instance')

AND

y.inst_id = USERENV ('Instance')

AND

x.indx = y.indx

AND

x.ksppinm LIKE '%&par%'

/注意:隐含參數通常具有特殊的作用,一般不建議使用者查詢或者修改,本文大量引用隐含參數的目的隻有一個,那就是希望大家知道,所有在文檔中見到的限制、限制、門檻值、比率都是有來源的,隻要足夠細心,就能找出資料庫的真相,不再靠記憶來學習。

很多人可能更關心性能,如此頻繁的采樣是否會極大地影響資料庫的性能呢?

采樣的性能影響無疑是存在的,但是因為Oracle的采樣工具可以直接通路Oracle10g内部結構,是以是極其高效的,對于性能的影響也非常小,這也正是Oracle提供優化或診斷工具的優勢所在。

ASH資訊被設計為在記憶體中滾動的,在需要時早期的資訊是會被覆寫的。ASH記錄的資訊可以通過v$active_session_history視圖來通路,對于每個活動session,每次采樣會在這個視圖中記錄一行資訊。

這部分記憶體在SGA中配置設定:SQL> select * from v$sgastat where name like

'%ASH%';

POOL            NAME               BYTES

------------

---------------    ----------

shared pool   ASH buffers     6291456

注意,ASH buffers的最小值為1MB,最大值不超過30MB,大小按照以下算法配置設定:Max ( Min (cpu_count * 2MB, 5% * SHARED_POOL_SIZE,

30MB), 1MB)

在以上公式中,如果SHARED_POOL_SIZE未顯示設定,則限制為2%*SGA_TARGET。這一算法在Oracle 10g的不同版本中,可能不同。

根據這個算法,這裡采樣系統配置設定的ASH Buffers為6MB:

oracle ash介紹,循序漸進Oracle - 全面認識Oracle ASH

另外一個生産系統中,這一記憶體配置設定為8MB:

oracle ash介紹,循序漸進Oracle - 全面認識Oracle ASH

記錄在SGA中的ASH資訊,可以通過v$session_wait_history進行查詢:

oracle ash介紹,循序漸進Oracle - 全面認識Oracle ASH

二、ASH報告

我們可以通過Oracle提供的工具生成ASH的報告,報告可以以幾分鐘為跨度對資料庫進行精确分析;也可以以數小時或數天為時間跨度,為資料庫提供概要分析。生成ASH報告主要可以通過兩種方式。

oracle ash介紹,循序漸進Oracle - 全面認識Oracle ASH

腳本方式

調用$ORACLE_HOME/rdbms/admin/ashrpt.sql腳本,回答一系列問題之後,就可以生成一個ASH的報告,報告包括Top等待事件、Top SQL、Top SQL指令類型、Top sessions等内容,摘錄部分報告内容如下。

首先使用$ORACLE_HOME/rdbms/admin/ashrpt.sql腳本:

oracle ash介紹,循序漸進Oracle - 全面認識Oracle ASH

資料庫可用的采樣資料:

oracle ash介紹,循序漸進Oracle - 全面認識Oracle ASH

完成一系列定義之後,ASH會将使用者定義概要顯示出來:

oracle ash介紹,循序漸進Oracle - 全面認識Oracle ASH

然後生成ASH報告,接下來對這個報告進行一點詳細說明:

oracle ash介紹,循序漸進Oracle - 全面認識Oracle ASH

頂級使用者事件(TopUser Events)部分列出了采樣時段内資料庫發生的顯著使用者等待,可以看到行級鎖競争(enq: TX - row lock contention)占用了87.82%的活動時間。

oracle ash介紹,循序漸進Oracle - 全面認識Oracle ASH

頂級背景程序事件(TopBackground Events)部分列出背景程序等待事件,對于本例沒有輸出:

oracle ash介紹,循序漸進Oracle - 全面認識Oracle ASH

對于頂級等待事件,接下來部分列出了相關等待時間及其參數值。根據這些參數,可以知道等待發生在哪些對象或資源上,對于不同的等待事件,P1/P2/P3列資訊被完整地記錄在案,在Oracle 10g之前,我們是無法在事後獲得這部分資訊的:

oracle ash介紹,循序漸進Oracle - 全面認識Oracle ASH

頂級服務群組件(TopService/Module),這一部分列出活動程序的使用者及應用資訊,通過這部分資訊可以看到,活動時間最久的應用是SQL*Plus,那麼也就意味着,相關SQL是通過SQL*Plus直接執行的:

oracle ash介紹,循序漸進Oracle - 全面認識Oracle ASH

頂級SQL指令類型(Top SQL Command Types)部分列出了ASH采樣階段資料庫接受的指令類型,通過以下的資料注意到,采樣階段占用87.82%時間的SQL是一條UPDATE指令:

oracle ash介紹,循序漸進Oracle - 全面認識Oracle ASH

再轉到Top SQL部分,引發資料庫等待的SQL在此被列出,在這裡看到那條引發等待的UPDATE語句排在了第一位,第二位的SQL則引發了全表掃描:

oracle ash介紹,循序漸進Oracle - 全面認識Oracle ASH

通過以上介紹我們已經能夠感受到ASH的強大之處。

session及session的等待資訊、進一步的SQL資訊都被記錄在案,并且能夠通過ASH報告清晰展現,這對于追蹤資料庫的性能問題,發現資料庫性能瓶頸提供了極大的幫助。

這在Oracle 10g之前都需要DBA去跟蹤、捕獲,現在Oracle幫助我們完成了這一切。

接下來列出了資料庫未使用綁定變量的SQL示例(Top SQLUsing Literals),看來Oracle将綁定變量的重要性進一步提高了:

oracle ash介紹,循序漸進Oracle - 全面認識Oracle ASH

頂級會話(TopSessions)部分列舉了處于等待的會話,資訊包括詳細的等待事件、等待使用者等:

oracle ash介紹,循序漸進Oracle - 全面認識Oracle ASH

阻塞會話清單(TopBlocking Sessions)部分列舉了被阻塞的會話資訊,這個資訊和測試追蹤的資訊一緻,其來源同樣一緻:

oracle ash介紹,循序漸進Oracle - 全面認識Oracle ASH

此外還有頂級并行查詢資訊,在這次采樣中,未有這類資訊記錄:

oracle ash介紹,循序漸進Oracle - 全面認識Oracle ASH

頂級資料庫對象(Top DBObjects)部分則列舉了相關等待具體等待的對象,對于我們測試的EYGLE表此處已經列出,資料庫業務應用全表掃描的資料表也已經被列出:

oracle ash介紹,循序漸進Oracle - 全面認識Oracle ASH

頂級資料檔案清單(Top DB Files)部分列出了全表掃描通路的資料檔案資訊:

oracle ash介紹,循序漸進Oracle - 全面認識Oracle ASH

頂級栓鎖(Top Latches)部分列出Latch競争,對于本例沒有這類競争:

oracle ash介紹,循序漸進Oracle - 全面認識Oracle ASH

活動結束時間(Activity Over Time)部分列出了各類等待的細粒度顯示:

oracle ash介紹,循序漸進Oracle - 全面認識Oracle ASH

通過ASH報告可以注意到,以前需要通過使用者追蹤或者不易跟蹤的資訊,通過現在的ASH報告,可以很清晰地從始至終獲得全面的資訊,與以前版本比較起來,性能診斷和分析可以用“易如反掌”來形容。

oracle ash介紹,循序漸進Oracle - 全面認識Oracle ASH

EM圖形方式

通過Oracle 10g Web方式的EM,可以在性能頁,單擊“運作ASH報告”按鈕生成ASH報告,如圖所示。

oracle ash介紹,循序漸進Oracle - 全面認識Oracle ASH

隻要試用一下就可以感受到ASH的強大功能,OEM生成的ASH報告非常清晰和直覺。ASH的概況資訊如下圖所示。

oracle ash介紹,循序漸進Oracle - 全面認識Oracle ASH

等待事件資訊如下。

oracle ash介紹,循序漸進Oracle - 全面認識Oracle ASH

等待參數資訊如下。

oracle ash介紹,循序漸進Oracle - 全面認識Oracle ASH

Top SQL等資訊如下。

oracle ash介紹,循序漸進Oracle - 全面認識Oracle ASH
oracle ash介紹,循序漸進Oracle - 全面認識Oracle ASH

加入"雲和恩墨大講堂"微信群,參與讨論學習