常用历史语句:
dba_hist_active_sess_history
v$active_session_history
dba_hist_sqlstat
dba_hist_active_sess_history
dba_hist_active_sess_history 是 v$active_session_history 的持久化视图。多个触发条件写入 dba 视图中。
mmon 进程把 v$active_session_history 中的信息采集到基表 WRH$_ACTIVE_SESSION_HOSTORY ,然后 dba_hist_active_sess_history 从基表中获取信息, awr 从 dba_hist_active_sess_history 中
每隔 10 秒钟转储来自 v$active_session_history 的活动 session 信息
_ash_disk_filter_ratio (秒)
gv$active_session_history
v$active_session_history 使用的是 x$ash 基表。 x$ash 数据存放在 Shared Pool 的 ASH Buffer 中,大小由隐含参数 "_ash_size" 决定。
每 1 秒( _ash_sampling_interval ,单位毫秒)将 v$session 中记录保存到 v$active_session_history 视图中,只会加载非 idle 会话。
存在内存,重启就会消失。用做 ASH 报表。
重要!!!
1.mmnl 进程从 gv$session 视图(从 X$KSUSE 基表获取)采集信息到 ash buffers 中,并且被获取到 X$ASH 基表中,默认 1 秒一次( _ash_sampling_interval ,单位毫秒)。
2.gv$active_session_history 视图从 X$ASH 基表读取数据,由 mmon 进程将 gv$active_session_history 视图信息持久化到 wrh$_active_session_history 基表中。
3.dba_hist_active_sess_history 视图从 wrh$_active_session_history 基表读取数据,默认 10 秒一次( _ash_disk_filter_ratio ,秒)。
4.awr 报告数据从 dba_hist_active_sess_history 视图获取。
其中 x$ksuse 是 gv$session 视图所使用的基表,同样可以通过前面的方法查到( set autotrace trace )。首先 mmnl 进程从 gv$session 动态性能视图中采集信息,默认每秒采集一次,然后将采集的信息写入到 ash buffers 中,此时活动会话信息已经进入到 x$ash 基表中,然后 gv$active_session_history 视图从 x$ash 基表中读取数据, mmon 进程负责对 gv$active_session_history 视图中的信息进行持久化,持久化到 wrh$_active_session_history 基表中,而 dba_hist_active_sess_history 视图中的数据又是来源于 wrh$_active_session_history 基表。可以看到 ash 相关的部分除了需要 mmon 进程进行持久化到 awr ,实际上正如前边所说的, ash 和 awr 是两个不同的东西,不能混为一谈。
最后列出几个和 ASH 相关的隐含参数:
- _ash_disk_filter_ratio
采样到 DBA_HIST_ACTIVE_SESS_HISTORY 中的频率,默认为 10s 一次
- _ash_disk_write_enable
开启采样到 DBA_HIST_ACTIVE_SESS_HISTORY ,设置为 false 则即使创建快照也不会刷新数据到 DBA_HIST_ACTIVE_SESS_HISTORY 视图中
- _ash_eflush_trigger
ASH buffers 满了多少以后会写出,默认为 66%
- _ash_enable
禁用和启用 ASH 采样
- _ash_sample_all
设置为 true ,则所有会话都会被采样,包括处于空闲等待的会话,默认是 false
- _ash_sampling_interval
ASH 采样间隔时间,默认为 1000ms
- _ash_size
ASH buffers 大小
查看 _ash_size 如果超过 256 m 可能触发 bug20185439 ( 2268127.1 )
如果 _ash_size 过小(默认 1m ),可能导致刷新次数过多,造成性能瓶颈。
设置参数会刷新一次。
建议大小为 total_size的1.5倍
select total_size/1024/1024,awr_flush_emergency_count from v$ash_info;
oracle 建议多次出现此问题再解决 Active Session History (ASH) performed an emergency flush
ash 是否存在异常刷新( awr_flush_emergency_count )
select total_size/1024/1024,awr_flush_emergency_count from v$ash_info;
alter system set "_ash_size"=2048618 sid='*' scope=spfile;
参考:
https://www.cnblogs.com/andy6/p/8301933.html
https://blog.csdn.net/JiekeXu/article/details/129434277