暂无图片
dba_hist_active_sess_history 这个里面的数据是怎么来的?
我来答
分享
Y
YanLang
2024-03-08
dba_hist_active_sess_history 这个里面的数据是怎么来的?
暂无图片 5M

dba_hist_active_sess_history 这个里面的数据是怎么来的? 为什么在v$sql 中查得到的sql_id 在 dba_hist_active_sess_history  里面没有?

我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新
lianR

dba_hist_active_sess_history  视图中的数据来自于  Oracle  的自动工作负载存储库  (AWR)。这个存储库定期收集数据库的性能统计信息,包括活动会话历史  (ASH)  数据。ASH  数据提供了数据库中的会话活动的样本,每秒收集一次。

v$sql  视图中的数据则是数据库中当前活动的  SQL  语句的信息。

因此,如果你在  v$sql  中找到一个  SQL  语句,但在  dba_hist_active_sess_history  中找不到,可能有以下几个原因:

1.  SQL  语句执行的时间可能在  AWR  的采样间隔之外。例如,如果  SQL  语句在两次  AWR  快照之间执行并完成,那么你可能在  ASH  数据中找不到它。

2.  AWR  只保留一段时间的数据。默认情况下,AWR  保留  8  天的数据。如果  SQL  语句执行的时间超过了这个时间范围,那么你在  ASH  数据中也找不到它。

3.  AWR  可能没有收集到所有的  SQL  语句。AWR  的采样率可能不足以捕获所有的  SQL  语句,特别是那些执行时间非常短的  SQL  语句。

4.  如果数据库在执行  SQL  语句时没有足够的活动会话,那么这个  SQL  语句可能不会出现在  ASH  数据中。因为  ASH  数据是基于活动会话的,所以如果没有活动会话,那么  SQL  语句就不会被记录下来。

暂无图片 评论
暂无图片 有用 2
打赏 0
广州_老虎刘

oracle 后台进程每秒对v$session 做快照, 把状态是ACTIVE的记录临时存放到v$active_session_history;

每隔10秒的v$active_session_history记录会保存到dba_hist_active_sess_history (AWR)

如果你的SQL执行时间超过10秒, 应该会出现在dba_hist_active_sess_history(超过awr保留期的历史SQL除外)

如果你的SQL执行时间比较短, 执行次数比较少, 被v$active_session_history采集到的概率就比较小, 即使被v$active_session_history采集到, 也可能是没有保存到dba_hist_active_sess_history的那9/10 . 

如果SQL执行比较频繁, 即使时间很短, 也很有可能被dba_hist_active_sess_history捕获到

暂无图片 评论
暂无图片 有用 1
打赏 0
回答交流
Markdown


请输入正文
提交