ASH:
Active Session History,ASH以v$SESSION为基础,每秒采样一次,记录活动会话等待的事件。不活动的会话不会采样, 采样工作由新引入的后台进程MMNL完成。
v$active_session_history
视图提供了在实例级别抽取会话活动信息。活动会话每分钟会被抽样一次且被存储在sga中的循环缓冲区中.任何被连接到数据库且正等待一个不属于空闲等待事件的会话会被考虑是一个活动的会话。每个会话抽样都是一组行数据且通过v$active_session_history视图来返回每个被抽样活动会话的行数据,返回最新被抽样会话的第一行数据。因为活动会话抽样是存储在sga中的循环缓冲区中,系统活动越大的,活动时间越少会话的可以被存储在循环缓冲区中。这意味着在这期间被抽样的每个会话会出现在v$视图中或者会话活动的时间会在v$视图中被显示,这完全依赖于数据库活动情况。
手工创建快照
SQL> exec DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT (); PL/SQL procedure successfully completed.
可以通过dba_hist_wr_control查看当前的配置情况,当前awr为每1小时做一次数据快照,保留时间为8天。
修改配置,每隔10分钟收集一次,保存90天
SQL> execute dbms_workload_repository.modify_snapshot_settings(interval=>10,retention=>90*24*60); PL/SQL procedure successfully completed.
生成ASH报告
ashrpt.sql 在$ORACLE_HOME/rdbms/admin/ashrpt.sql
SQL> @?/rdbms/admin/ashrpt.sql
日志报告类型: text 还是html
日志报告起始时间: -9:00
日志报告结束时间: <enter> #当前时间为报告结束时间
报告名称: /oracle/D4C/193/D4CASH.html
结果: Report written to /oracle/D4C/193/D4CASH.html
SELECT * FROM ( SELECT to_char(to_date(trunc(to_char(sample_time,‘SSSSS‘)/10)*10,‘SSSSS‘),‘hh24:mi:ss‘) start_time, decode(ash.session_state,‘ON CPU‘,‘ON CPU‘,ash.event) event, count(1)/10 total from v$active_session_history ash where sample_time>sysdate-1/24 group by trunc(to_char(sample_time,‘SSSSS‘)/10),decode(ash.session_state,‘ON CPU‘,‘ON CPU‘,ash.event) ) ASH PIVOT (SUM(TOTAL) FOR EVENT IN(‘ON CPU‘ AS TOP1,‘pX Deq: Slave sestion Stats ‘ AS TOP2)) ORDER BY 1;