天天看點

Oracle10g ASH使用

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 的值: <enter預設html格式>

輸入 begin_time 的值: -30    (查詢過去半小時内的session情況)

輸入 duration 的值: <enter預設到目前位置>

輸入 report_name 的值: <enter預設指定的報告名字>

Report written to ashrpt_1_1112_1047.html

下載下傳ashrpt_1_1112_1047.html檔案并檢視分析。

--End--