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'; 利用这些视图定位许多信息问题
V$ACTIVE_SESSION_HISTORY视图的使用
来源:这里教程网
时间:2026-03-03 12:48:34
作者:
编辑推荐:
- V$ACTIVE_SESSION_HISTORY视图的使用03-03
- Word文档中万分号怎么打?03-03
- word表格标题跨页怎么办03-03
- 数据库用impdp导入时日志报错:ORA-39246, ORA-39059,哪位大神给解答一下03-03
- Word 2016利用插件实现数字自动上下标03-03
- Word2016文档中的图片怎么调整亮度?03-03
- Oracle的lock 和latch03-03
- word文档怎么改变单元格中的文字方向03-03
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 数据库用impdp导入时日志报错:ORA-39246, ORA-39059,哪位大神给解答一下
- Oracle的lock 和latch
Oracle的lock 和latch
26-03-03 - Oracle RMAN: change backup tag "test" unavailable;将备份设置为不可用
- 小时制式问题
小时制式问题
26-03-03 - Oracle Cloud (DBaaS): Migrating Databases to Oracle Cloud Using RMAN Backup
- oracle11g 查询临时表空间的使用率和正在使用临时表空间的用户
oracle11g 查询临时表空间的使用率和正在使用临时表空间的用户
26-03-03 - 没有索引导致的DIRECT PATH READ
没有索引导致的DIRECT PATH READ
26-03-03 - ASM 搭建单实例
ASM 搭建单实例
26-03-03 - Oracle autotrace 报 SP2-0618 PLUSTRACE role 问题解决
- Oracle的体系结构
Oracle的体系结构
26-03-03
