蚕香沙:ASH(Active Session History)

来源:百度文库 编辑:九乡新闻网 时间:2024/05/02 09:06:24
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文件并查看分析。