我的编程空间,编程开发者的网络收藏夹
学习永远不晚

V$ACTIVE_SESSION_HISTORY视图的使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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';

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



免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

V$ACTIVE_SESSION_HISTORY视图的使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Oracle动态视图v$active_session_history怎么应用

这篇文章主要介绍“Oracle动态视图v$active_session_history怎么应用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Oracle动态视图v$active_session_hi
2023-07-05

Oracle动态视图v$active_session_history实战示例

目录oracle动态视图实战之v$active_session_history先看下官方解释实际工作中主要应用结合我们的AWR报告关键点Oracle动态视图实战之v$active_session_history先看下官方解释Samples
2023-03-08

详解12c的v$pwfile_user视图和Oracle11g区别

我们一起看看详解12c的v$pwfile_user视图和Oracle11g区别。V$PWFILE_USERS 列出的是password文件里已授予sysdba、sysoper权限的用户,如果查询没有记录,那就有可能没有了password文件了,没有了密码文件当然sqlplus sys/xx as sysdba这种用sys用sysdba用户就无法登录了。下面介绍一下11g和12c的v$pwfile_user视图。
详解12c的v$pwfile_user视图和Oracle11g区别
2024-04-23

PythonDjango通用视图和错误视图的使用代码

这篇文章主要介绍了PythonDjango通用视图和错误视图的使用,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-05-15

vue中的v-show,v-if,v-bind怎么使用

这篇文章主要介绍了vue中的v-show,v-if,v-bind怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue中的v-show,v-if,v-bind怎么使用文章都会有所收获,下面我们一起来看看吧
2023-07-05

Vue中v-if、v-if-else、v-else-if与v-show的基本使用

v-if,v-else,v-else-if,v-if指令用于条件性地渲染一块内容,这块内容只会在指令的表达式返回truth值的时候被渲染,这篇文章主要给大家介绍了关于Vue中v-if、v-if-else、v-else-if与v-show的基本使用,需要的朋友可以参考下
2022-11-13

vue中的v-show,v-if,v-bind的使用示例详解

这篇文章主要介绍了vue中的v-show,v-if,v-bind的使用,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-05-14

Python Django通用视图和错误视图怎么使用

本文小编为大家详细介绍“Python Django通用视图和错误视图怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python Django通用视图和错误视图怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习
2023-07-06

Android网格视图GridView的使用

GridView(网格视图)是按照行列的方式来显示内容的,一般用于显示图片,图片等内容,比如实现九宫格图,用GridView是首选,也是最简单的。主要用于设置Adapter。 网格视图GridView的排列方式与矩阵类似,当屏幕上有很多元素
2022-06-06

怎么使用vue的v-for循环图片路径

这篇“怎么使用vue的v-for循环图片路径”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使用vue的v-for循环图片
2023-06-29

ViewFlipper(翻转视图)的基本使用

ViewFlipper是一个可以在其子View之间切换的视图容器。以下是ViewFlipper的基本使用步骤:1. 在布局文件中添加ViewFlipper标签,并在其中添加要显示的子视图,例如:```xml
2023-09-07

编程热搜

目录