Oracle10g ASH and AWR

tolywang發表於2009-07-03

ASH(Active Session History)

從Oracle10g開始引入了V$ACTIVE_SESSION_HISTORY檢視,用於查詢使用者活動會話的歷史資訊。

ASH每秒取樣V$session,記錄會話等待的事件,不活動的會話不會被取樣。這個取樣工具是非常有效的,因為它直接訪問oracle10g內部結構。

ASH預設每一秒收集一下活動會話的情況,間隔時間由 _ash_sampling_interval 引數確定。

由於資料量巨大,把所有的ASH資料寫到磁碟上是不可接受的。通常每60分鐘MMON程式會寫這些資訊,當ASH BUFFER滿的話MMNL程式會寫。

SQL> select * from v$sgastat where name like '%ASH%';
POOL         NAME                            BYTES
------------ -------------------------- ----------
shared pool ASH buffers                   6291456
注意,ASH buffers的大小按照以下演算法分配: Min(shared_pool_size*5%,2M*cpu_count)

V$ACTIVE_SESSION_HISTORY中的資料在被新資料週期性地覆蓋前保留30 分鐘,當資料從這個動態效能檢視中清除時,這些資料被送到活動工作負載資訊庫(Active Workload Repository,AWR)中,它是一個基於磁碟的資訊庫。被清除的ASH(活動會話歷史)資料可以在 DBA_HIST_ACTIVE_SESSION_HIST 檢視中看到,能夠看到過去的會話的等待事件,在預設狀態下,AWR中的資料7天后即被清除。

V$ACTIVE_SESSION_HISTORY包含top wait events, top SQL, top SQL command types,top sessions等等對於診斷故障非常有用的資訊。

V$ACTIVE_SESSION_HISTORY是生成ASH報表的來源,可以透過OEM來生成report,也可以透過Oracle新提供的一個指令碼來完成這個工作,執行指令碼:
SQL> @?/rdbms/admin/ashrpt.sql
輸入 report_type 的值:
輸入 begin_time 的值: -30    (查詢過去半小時內的session情況)
輸入 duration 的值:
輸入 report_name 的值:
Report written to ashrpt_1_1112_1047.html
下載ashrpt_1_1112_1047.html檔案並檢視分析。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-609523/,如需轉載,請註明出處,否則將追究法律責任。

相關文章