Oracle 数据库中的awr及ash 为 dba提供了非常便利的条件,来分析数据库相关性能问题,下面主要介绍awr相关信息。
awr主要结构
2.awr相关视图
相关视图还有一个 dba_hist_snapshot ,来辅助查询。相关视图主要列介绍:
3.ASH
4.AWR 相关脚本
5.相关sql语句举例
--Wait events 5min set lines 200 pages 999 col event for a32 select * from ( select sql_id,inst_id, sum(decode(vash.session_state,'ON CPU',1,0)) as "ON CPU", sum(decode(vash.session_state,'WAITING',1,0)) as "WAITING ON CPU", event,count(distinct(session_id||session_serial#)) as "SESSION COUNT" from gv$active_session_history vash where sample_time > sysdate -10/(60*24) group by event,inst_id,sql_id order by 4 desc ) where rownum<=20; --query sql_id dbtime ,last 10 minutes select * from ( select nvl(sql_id,'null') as sql_id,sum(1) as "DBtime in Seconds" from v$active_session_history where sample_time > sysdate-10/(24*60) group by sql_id order by 2 desc ) where rownum<=11; -- cpu usage info ,last 10 minutes select * from ( select sql_id,inst_id, sum(decode(vash.session_state,'ON CPU',1,0)) as "Number on CPU", sum(decode(vash.session_state,'WAITING',1,0)) as "Number WAITING ON CPU" from gv$active_session_history vash where sample_time > sysdate -10/(60*24) group by sql_id,inst_id order by 3 desc ) where rownum<=20; --每天9点 dbtime对比 set linesize 200 set pagesize 20000 col DATE_TIME for a20 col STAT_NAME for a10 col dbtime_value1 for a10 col dbtime_value2 for a10 col dbtime_value3 for a10 WITH sysstat AS ( SELECT sn.begin_interval_time begin_interval_time, sn.end_interval_time end_interval_time, ss.VALUE e_value, ss.instance_number instance_number, lag(ss.VALUE, 1) over (ORDER BY ss.snap_id) b_value FROM DBA_HIST_SYS_TIME_MODEL ss, dba_hist_snapshot sn WHERE to_char(sn.end_interval_time,'hh24')='09' --每天9-10点 dbtime AND ss.snap_id = sn.snap_id AND ss.dbid = sn.dbid AND ss.instance_number = sn.instance_number AND ss.dbid = (SELECT dbid FROM v$database) AND ss.stat_name = 'DB time' ) select date_time,listagg(dbtime_value1) within group (order by date_time) dbtime_1, listagg(dbtime_value2) within group (order by date_time) dbtime_2, listagg(dbtime_value3) within group (order by date_time) dbtime_3 from ( select to_char(end_interval_time,'yyyy-mm-dd hh24:mi') date_time, CASE WHEN instance_number=1 then round((e_value - nvl(b_value, 0))/60/1000/1000 ,2) end as dbtime_value1, CASE WHEN instance_number=2 then round((e_value - nvl(b_value, 0))/60/1000/1000 ,2) end as dbtime_value2, CASE WHEN instance_number=3 then round((e_value - nvl(b_value, 0))/60/1000/1000 ,2) end as dbtime_value3 FROM sysstat WHERE (e_value - nvl(b_value, 0)) > 0 AND nvl (b_value, 0) > 0 order by 1 ) group by date_time;
参考:Using Automatic Workload Repository for Database Tuning: Tips for Expert DBAs
