1、ASH (Active SessionHistory)
ASH以V$SESSION为基础,每秒采样一次,记录活动会话等待的事件。不活动的会话不会采样,采样工作由新引入的后台进程MMNL来完成。
v$active_session_history视图提供了在实例级别抽取会话活动信息。活动会话每分钟会被抽样一次且被存储在sga中的循环缓冲区中.任何被连接到数据库且正等待一个不属于空闲等待事件的会话会被考虑是一个活动的会话。每个会话抽样都是一组行数据且通过v$active_session_history视图来返回每个被抽样活动会话的行数据,返回最新被抽样会话的第一行数据。因为活动会话抽样是存储在sga中的循环缓冲区中,系统活动越大的,活动时间越少会话的可以被存储在循环缓冲区中。这意味着在这期间被抽样的每个会话会出现在v$视图中或者会话活动的时间会在v$视图中被显示,这完全依赖于数据库活动情况。
ASH buffers 的最小值为1MB,最大值不超过30MB.内存中记录数据。期望值是记录一小时的内容,所以说ASH 内存记录数据始终是有限的
一般在线上实时诊断数据库性能问题,特别是负载高w出来上了100后,cpu 100%,这个时候用ash实时出日志报告,就能很大程度上准确定位问题所在。
2、登录oracle服务端的用户
输入sqlplus / as sysdba后进入sql,在sqlplus 下执行@/app/oracle/product/11.2.0.4/db_1/rdbms/admin/ashrpt.sql后出现:
(1)日志报告类型
Enter value for report_type: text
-- 选择生成的ASH 报告类型,是text 还是html
(2)日志报告起始时间
Enter value for begin_time: 09/04/13:00:00
-- 输入ASH 开始的时间,时间格式上面的示例有说明,比如我这里是2020年9月4日中午13:00:00开始。
(3)日志报告结束时间
Enter value for duration:7200
-- 输入ASH 结束时间,默认是SYSDATE - begin_time,一般输入的分析统计的总时间,一般默认是秒,比如这里7200就是2个小时,拿出2个小时的ash分析日志来。
以上三个选项可以全部按Enter过去,因为有default值。
最后会生成一个html文件及其代码,文件我没找到放哪里,但是我们可以将代码复制出来,创建文件粘贴进去,再将格式改为html就OK了。
此时我们就生成好了oracle ASH报告了。
截个图: