oracle 历史视图视图,看这一篇就够了(终极版)


常用历史语句:

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


请使用浏览器的分享功能分享到微信等