从 Oracle 10g 开始,Oracle
引入了 ASH 新特性,也就是活动 Session 历史信息记录(ActiveSession History,ASH)。ASH 以 V$SESSION 为基础,每秒钟采样一次,记录活动会话等待的事件。
因为记录所有会话的活动是非常昂贵的,所以不活动的会话不会被采样,这一点从 ASH的“A”上就可以看出。采样工作由 Oracle 10g 新引入的一个后台进程 MMNL 来完成。
是否启用 ASH 功能,受一个内部隐含参数控制:
_ash_enable
TRUE To enable or disable Active
Session sampling and flushing
而采样时间同样由另一个内部隐含参数决定:
_ash_sampling_interval 1000
Time interval between two successive Active Session samples in millisecs
1000 毫秒,正好是 1 秒的时间。
ASH 信息被设计为在内存中滚动的,在需要的时候早期的信息是会被覆盖的。ASH 记录的信息可以通过 v$active_session_history 视图来访问,对于每个活动 SESSION,每次采样会在这个视图中记录一行信息。
这部分内存在 SGA 中分配:
select * from v$sgastat where name like
'%ASH%';
注意 ASH buffers 的最小值为 1MB,最大值不超过 30MB,大小按照以下算法分配:
Max ( Min (cpu_count * 2MB, 5% *
SHARED_POOL_SIZE, 30MB), 1MB)




