千家信息网

V$ACTIVE_SESSION_HISTORY视图的使用

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,V$ACTIVE_SESSION_HISTORY 显示数据库中的采样会话活动。ASH每秒从v$session中取快照,存在V$ACTIVE_SESSION_HISTORY中,并收集所有活动会话的等待信
千家信息网最后更新 2026年11月01日V$ACTIVE_SESSION_HISTORY视图的使用

V$ACTIVE_SESSION_HISTORY 显示数据库中的采样会话活动。ASH每秒从v$session中取快照,存在V$ACTIVE_SESSION_HISTORY中,并收集所有活动会话的等待信息。若ASH数据被刷新到磁盘,则需要从DBA_HIS_ACTIVE_SESS_HISTORY视图中查询相关信息。


该视图是ASH的核心,用以记录活动SESSION的历史等待信息,每秒采样一次,这部分内容记录在内存中,期望值是记录一个小时的内容。

用法举例:查找最近一分钟内,最消耗CPU的sql语句

SELECT sql_id, count(*), round(count(*) / sum(count(*)) over(), 2) pctload

FROM V$ACTIVE_SESSION_HISTORY

WHERE sample_time > sysdate - 1 / (24 * 60)

AND session_type <> 'BACKGROUND'

AND session_state = 'ON CPU'

GROUP BY sql_id

ORDER BY count(*) desc;


用法举例:查找最近一分钟内,最消耗I/O的sql语句

SELECT ash.sql_id,count(*)

FROM V$ACTIVE_SESSION_HISTORY ASH,V$EVENT_NAME EVT

WHERE ash.sample_time > sysdate -1/(24*60)

AND ash.session_state = 'WAITING'

AND ash.event_id = evt.event_id

AND evt.wait_class = 'USER I/O'

GROUP BY ash.sql_id

ORDER BY count(*) desc;


用法举例:查找最近一分钟内,最消耗CPU的session

SELECT session_id,count(*)

FROM V$ACTIVE_SESSION_HISTORY

WHERE session_state = 'ON CPU'

AND sample_time > sysdate -1/(24*60)

GROUP BY session_id

ORDER BY count(*) desc;


用法举例:查找最近一分钟内,最消耗资源的sql语句

SELECT ash.sql_id,

sum(decode(ash.session_state,'ON CPU',1,0)) "CPU",

sum(decode(ash.session_state,'WAITING',1,0)) -

sum(decode(ash.session_state,'WAITING',decode(en.wait_class,'USER I/O',1,0),0)) "WAIT",

sum(decode(ash.session_state,'WAITING',decode(en.wait_class,'USER I/O',1,0),0)) "IO",

sum(decode(ash.session_state,'ON CPU',1,1)) "TOTAL"

FROM V$ACTIVE_SESSION_HISTORY ASH,V$EVENT_NAME EN

WHERE SQL_ID is not null and en.event#=ash.event# and ash.sample_time > sysdate -1/(24*60)

GROUP BY ash.sql_id

ORDER BY sum(decode(ash.session_state,'ON CPU',1,1)) desc;


用法举例:查找最近一分钟内,最消耗资源的session

SELECT ash.session_id,ash.session_serial#,ash.user_id,ash.program,

sum(decode(ash.session_state,'ON CPU',1,0)) "CPU",

sum(decode(ash.session_state,'WAITING',1,0)) -

sum(decode(ash.session_state,'WAITING',decode(en.wait_class,'USER I/O',1,0),0)) "WAITING",

sum(decode(ash.session_state,'WAITING',decode(en.wait_class,'USER I/O',1,0),0)) "IO",

sum(decode(ash.session_state,'ON CPU',1,1)) "TOTAL"

FROM V$ACTIVE_SESSION_HISTORY ASH,V$EVENT_NAME EN

WHERE en.event# = ash.event# and ash.sample_time > sysdate -1/(24*60)

GROUP BY ash.session_id,ash.user_id,ash.session_serial#,ash.program

ORDER BY sum(decode(ash.session_state,'ON CPU',1,1))

---------------------



在数据库出现性能问题的时候使用awr,ash,addm都是不错的选择,实际上直接查询v$active_session_history也能很快定位解决问题。
实际上如果查看v$active_session_history视图,结合一些视图可以获取许多信息。
举几个例子来说明:

1.确定那个对象有高的等待:
SELECT a.current_obj#, o.object_name, o.object_type, a.event, SUM (a.wait_time + a.time_waited) total_wait_time
FROM v$active_session_history a, dba_objects o
WHERE a.sample_time BETWEEN SYSDATE - 30 / 1440 AND SYSDATE AND a.current_obj# = o.object_id
GROUP BY a.current_obj#, o.object_name, o.object_type, a.event
ORDER BY total_wait_time desc ; 2.看看一段时间主要是那些等待事件:
SELECT a.event, SUM (a.wait_time + a.time_waited) total_wait_time
FROM v$active_session_history a
WHERE a.sample_time BETWEEN SYSDATE - 30 / 1440 AND SYSDATE
GROUP BY a.event
ORDER BY total_wait_time DESC; 3.看看那个回话有问题:
SELECT s.SID, s.username, SUM (a.wait_time + a.time_waited) total_wait_time
FROM v$active_session_history a, v$session s
WHERE a.sample_time BETWEEN SYSDATE - 30 / 1440 AND SYSDATE AND a.session_id = s.SID
GROUP BY s.SID, s.username
ORDER BY total_wait_time DESC;
--当然这个只能查询最近的会准一点,回话退出就不行了。

4.看看那个sql语句有问题。
SELECT a.user_id, d.username, s.sql_text, SUM (a.wait_time + a.time_waited) total_wait_time
FROM v$active_session_history a, v$sqlarea s, dba_users d
WHERE a.sample_time BETWEEN SYSDATE - 15 / 1440 AND SYSDATE AND a.sql_id = s.sql_id AND a.user_id = d.user_id
GROUP BY a.user_id, s.sql_text, d.username
order by SUM (a.wait_time + a.time_waited) desc

-- 这里查询的是v$sqlarea视图。 同样你可以使用视图DBA_HIST_ACTIVE_SESS_HISTORY代替v$active_session_history查询历史的信息。

select * from dba_objects where wner='SYS' and object_name like 'DBA_HIST%' and object_type='VIEW';

利用这些视图定位许多信息问题



视图 信息 问题 查询 消耗 语句 数据 活动 内容 历史 实际 实际上 数据库 资源 定位 不行 不错 个例 事件 内存 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 苏州找大状互联网科技有限公司 涨乐互联网科技 科技互联网政务服务 互联网科技垄断 网络科技有限互联网 广州宏创互联网科技 百单互联网科技有限公司 狮子座互联网科技培训 湖北码尼互联网科技有限公司电话 世界互联网科技公司市值排名 互联网科技公司实习生 搜狐科技互联网 浙南科技城互联网大厦建设工程 中和天地互联网科技有限公司 国大互联网教育科技有限公司薪资 中国互联网有什么科技 张家口科技产业互联网平台 平安好医生打造互联网科技医疗 青岛互联网科技园 广东猫王互联网科技有限公司电话 互联网 科技 互联网 卓越科技 人人互联网科技是培训 成都仁贤领冠互联网科技有限公司 须眉科技是互联网公司吗 重庆互联网医院沙龙医盟信息科技 云南省自由互联网科技有限公司 国产互联网科技公司 保山浩联互联网科技有限公司 科技互联网企业在行动
0