【正确答案】ASH(Active Session History,活动会话历史信息)每秒从V$SESSION中取ACTIVE状态会话的信息,存储在V$ACTIVE_SESSION_HISTORY中,并收集所有活动会话的等待信息,不活动的会话不会采样。这里的活动会话包含2类情况,一类是非空闲等待事件(WAIT_CLASS<>'Idle'),一类是“ON CPU”状态的会话。采样工作由新引入的后台进程MMNL (Manageability Monitor Lite Process)来完成。若ASH数据被刷新到磁盘,则需要从DBA_HIST_ACTIVE_SESS_HISTORY视图中查询相关信息。
是否启用ASH功能,受一个隐含参数“_ASH_ENABLE”的控制,默认为TRUE。而采样时间同样由另一个隐含参数“_ASH_SAMPLING_INTERVAL”决定,默认为1000ms,即1s。
众所周知,动态性能视图实质是Oracle自行构造的一堆存在于SGA内存区的虚表,也就是说,ASH的数据是保存在内存里的,实际上,Oracle分配给ASH的空间并不是无限大,ASH buffers的最小值为1MB,最大值不超过30MB。ASH占用的SGA内存大小可以通过如下SQL查询:
