正德厚生,臻于至善

awr related

取AWR方法
1、根据取AWR报告的时间范围,查出快照ID;

SQL> SELECT *
  FROM DBA_HIST_SNAPSHOT T
 WHERE T.END_INTERVAL_TIME >=
       TO_DATE('2017-10-09 09:00:00', 'yyyy-MM-dd hh24:mi:ss')
   AND T.END_INTERVAL_TIME <=
       TO_DATE('2017-10-09 10:01:00', 'yyyy-MM-dd hh24:mi:ss')
 ORDER BY SNAP_ID;

2、利用第一步的END_INTERVAL_TIME,SNAP_ID,DBID,INSTANCE_NUMBER生成报告
SQL> SELECT * FROM TABLE(DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML(1700577032,1,38247,38251,0));
或者:
SQL> SELECT DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML(1700577032,1,38247,38251,0) FROM dual;   

3、把结果粘贴到一个txt中,比如a.txt保存退出。然后改此文件后缀为html,比如a.html. 最后用浏览器打开a.html即可 ,如果需要生成txt格式的报告,则用DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_TEXT这个函数即可

生成对比的AWR报告
	3.1、同样的,根据取AWR报告的时间范围,查出快照ID
	3.2、利用下面的函数取出报告,导出即可
SQL> SELECT DBMS_WORKLOAD_REPOSITORY.AWR_DIFF_REPORT_HTML(1700577032,1,38247,38251,1700577032,1,38151,38155) FROM DUAL;

相关函数
--生成html格式的awr报告
FUNCTION AWR_REPORT_HTML(L_DBID IN NUMBER,      --database ID number
                         L_INST_NUM IN NUMBER,  --instance number
                         L_BID IN NUMBER,       --开始的快照ID,在dba_hist_snapshot里找
                         L_EID IN NUMBER,       --结束的快照ID,在dba_hist_snapshot里找
                         L_OPTIONS IN NUMBER DEFAULT 0)
 RETURN AWRRPT_HTML_TYPE_TABLE
  PIPELINED;
 
--生成txt格式的awr报告
FUNCTION AWR_REPORT_TEXT(L_DBID IN NUMBER,      --database ID number                         
                         L_INST_NUM IN NUMBER,  --instance number                                      
                         L_BID IN NUMBER,       --开始的快照ID,在dba_hist_snapshot里找
                         L_EID IN NUMBER,       --结束的快照ID,在dba_hist_snapshot里找
                         L_OPTIONS IN NUMBER DEFAULT 0)
 RETURN AWRRPT_TEXT_TYPE_TABLE
  PIPELINED;
 
--生成对比的awr报告
FUNCTION AWR_DIFF_REPORT_HTML(DBID1     IN NUMBER,
                              INST_NUM1 IN NUMBER,
                              BID1      IN NUMBER,
                              EID1      IN NUMBER,
                              DBID2     IN NUMBER,
                              INST_NUM2 IN NUMBER,
                              BID2      IN NUMBER,
                              EID2      IN NUMBER)
  RETURN AWRRPT_HTML_TYPE_TABLE
  PIPELINED;
													  
4、修改快照设置

SQL> select * from dba_hist_wr_control;
 
      DBID SNAP_INTERVAL             RETENTION                      TOPNSQL
---------- ------------------------- ------------------------------ ----------
1301772781 +00000 01:00:00.0         +00008 09:00:00.0              DEFAULT
 
SQL> exec dbms_workload_repository.modify_snapshot_settings(retention => 15*1440,interval => 30);
 
PL/SQL 过程已成功完成。
 
SQL> select * from dba_hist_wr_control;
 
      DBID SNAP_INTERVAL             RETENTION                      TOPNSQL
---------- ------------------------- ------------------------------ ----------
1301772781 +00000 00:30:00.0         +00015 09:00:00.0              DEFAULT

interval:将间隔设置为0时,oracle将禁止采用自动和手工快照的机制。
retention:当保存时间设置为0时,oracle将永久地保存这个快照。
topnsql:默认10条。

5、创建和删除快照

SQL> exec dbms_workload_repository.create_snapshot();
 
PL/SQL 过程已成功完成。
 
SQL> exec dbms_workload_repository.drop_snapshot_range(low_snap_id => 10,high_snap_id => 12);
 
PL/SQL 过程已成功完成。
 
SQL> exec dbms_workload_repository.drop_snapshot_range(low_snap_id => 628,high_snap_id => 629);
 
PL/SQL 过程已成功完成。

dba_hist_snapshot视图将列出有关可用快照的信息。

6、创建和删除基线

SQL> exec dbms_workload_repository.create_baseline(start_snap_id => 630,end_snap_id => 635,baseline_name => 'base line');
 
PL/SQL 过程已成功完成。
 
SQL> select baseline_name,start_snap_id,end_snap_id from dba_hist_baseline;
 
BASELINE_NAME                                                    START_SNAP_ID END_SNAP_ID
---------------------------------------------------------------- ------------- -----------
base line                                                                  630         635
SYSTEM_MOVING_WINDOW                                                       636         637
 
SQL> exec dbms_workload_repository.drop_baseline(baseline_name => 'base line',cascade => true);
 
PL/SQL 过程已成功完成。
 
SQL> select baseline_name,start_snap_id,end_snap_id from dba_hist_baseline;
 
BASELINE_NAME                                                    START_SNAP_ID END_SNAP_ID
---------------------------------------------------------------- ------------- -----------
SYSTEM_MOVING_WINDOW                                                       636         637
 
SQL> exec dbms_workload_repository.create_baseline(to_date('2013-11-03 09:00:00','yyyy-mm-dd hh24:mi:ss'),to_date('2013-11-03 12:00:00','yyyy-mm-dd hh24:mi:ss'),'base line2');
 
PL/SQL 过程已成功完成。
 
SQL> select baseline_name,start_snap_id,end_snap_id from dba_hist_baseline;
 
BASELINE_NAME                                                    START_SNAP_ID END_SNAP_ID
---------------------------------------------------------------- ------------- -----------
base line                                                                  685         686
base line2                                                                 685         686
SYSTEM_MOVING_WINDOW                                                       640         696
 
7、自动创建AWR基线

SQL> alter session set NLS_DATE_FORMAT= 'yyyy-mm-dd hh24:mi:ss';
 
会话已更改。
 
SQL> exec DBMS_WORKLOAD_REPOSITORY.create_baseline_template(
day_of_week          => 'WEDNESDAY',
hour_in_day          => 0,
duration             => 6,
start_time           => '2020-12-01:09:00:00',
end_time             => '2020-12-01:12:00:00',
baseline_name_prefix => 'Batch Baseline ',
template_name        => 'Batch Template',
expiration           => 365);
 
PL/SQL 过程已成功完成。
 
SQL> select t.template_name,
     t.template_type,
     t.start_time,
     t.end_time,
     t.day_of_week,
     t.hour_in_day,
     t.duration
from dba_hist_baseline_template t;
 
TEMPLATE_NAME                  TEMPLATE_ START_TIME          END_TIME            DAY_OF_WE HOUR_IN_DAY   DURATION
------------------------------ --------- ------------------- ------------------- --------- ----------- ----------
Batch Template                 REPEATING 2020-12-01 09:00:00 2020-12-01 12:00:00 WEDNESDAY           0          6
 
SQL> exec DBMS_WORKLOAD_REPOSITORY.drop_baseline_template('Batch Template');
 
PL/SQL 过程已成功完成。

day_of_week:天或者星期,基线在这个时间上重复。Specify one of the following values:('SUNDAY', 'MONDAY', 'TUESDAY', 'WEDNESDAY','THURSDAY', 'FRIDAY', 'SATURDAY', 'ALL')
hour_in_day:0-23,执行基线在这个小时开始。
duration:持续时间(小时数)。
start_time:创建基线的开始时间。
end_time:创建基线的结束时间。
expiration :基线过期的天数。

对于上面这个模板,将会在每周三根据0:00到上午6:00的时间窗口创建固定基线。

8.导出导入AWR信息
导出AWR信息。按照提示操作即可。
SQL> @$ORACLE_HOME/rdbms/admin/awrextr.sql

导入AWR信息,按照提示操作即可。
SQL> @$ORACLE_HOME/rdbms/admin/awrload.sql

-----------------------------------------扩展阅读:
如把awr设置为10分钟收集一次、每次收集50条耗费资源的sql,并保留2天的收集数据,可以用如下方式修改
SQL> exec dbms_workload_repository.modify_snapshot_settings(2*24*60,10,50);

exec DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(topnsql=>50);

exec DBMS_WORKLOAD_REPOSITORY.AWR_SET_REPORT_THRESHOLDS(top_n_sql=>50, top_n_events=>10);

col SNAP_INTERVAL format a30
col RETENTION format a30
set linesize 150
select * from dba_hist_wr_control;

1.awr 关注数据库的整体性能报告 类似于体检报告
@?/rdbms/admin/awrrpt
select output from table(dbms_workload_repository.awr_report_html(v_dbid,v_instance_number,v_min_snap_id,v_max_snap_id));
关注的要点:load_profile、efficiency percentages、top 5 events、SQL Statistics、segment_statistics

2.ash ash关注数据库中的等待事件与哪些sql具体对应 类似于胃镜
@?/rdbms/admin/ashrpt
select output from table(dbms_workload_repository.ash_report_html(dbid,inst_num,l_btime,l_etime));
关注的要点:等待事件与sql的具体结合

3.addm Oracle给出的一些建议 类似于病历卡记录
@?/rdbms/admin/addmrpt
select dbms_advisor.get_task_report('ADDM_02','TEXT','ALL') from dual;
关注的要点:整体性的建议,局部sql建议

4.awrdd 针对不同时段的性能的一个比对报告 医生分析前后两次体检报告的动作
@?/rdbms/admin/awrddrpt
关注的要点:不同时期的load_profile、不同时期等待事件、不同时期TOP SQL

5.awrsq 具体某个sql的执行计划,可以保存多个执行计划 类似于活检
@?/rdbms/admin/awrsqrpt
关注的要点:Plan Statistics、Execution Plan

-----------------------------------------awr报告
exec dbms_workload_repository.create_snapshot();

col SNAP_INTERVAL for a20
col RETENTION for a20
select * from dba_hist_wr_control;

      DBID SNAP_INTERVAL        RETENTION            TOPNSQL
---------- -------------------- -------------------- ----------
 188752074 +00000 00:30:00.0    +00014 00:00:00.0    DEFAULT
表示采样间隔是30分钟
表示采样数据保留期限是14天
exec dbms_workload_repository.modify_snapshot_settings(interval=>30,retention=>7*2*24*60,topnsql=>50);

@?/rdbms/admin/awrrpt.sql

1.登录:sqlplus / as sysdba
2.快照:exec dbms_workload_repository.create_snapshot

--生成不同形式的awr
1.生成单实例 AWR 报告:@$ORACLE_HOME/rdbms/admin/awrrpt.sql
2.生成 Oracle RAC AWR 报告:@$ORACLE_HOME/rdbms/admin/awrgrpt.sql
3.生成 RAC 环境中特定数据库实例的 AWR 报告:@$ORACLE_HOME/rdbms/admin/awrrpti.sql
4.生成 Oracle RAC 环境中多个数据库实例的 AWR 报告的方法:@$ORACLE_HOME/rdbms/admin/awrgrpti.sql
5.生成 SQL 语句的 AWR 报告:@$ORACLE_HOME/rdbms/admin/awrsqrpt.sql
6.生成特定数据库实例上某个 SQL 语句的 AWR 报告:@$ORACLE_HOME/rdbms/admin/awrsqrpi.sql

--生成 AWR 时段对比报告
7.生成单实例 AWR 时段对比报告:@$ORACLE_HOME/rdbms/admin/awrddrpt.sql
9.生成 Oracle RAC AWR 时段对比报告:@$ORACLE_HOME/rdbms/admin/awrgdrpt.sql
9.生成特定数据库实例的 AWR 时段对比报告:@$ORACLE_HOME/rdbms/admin/awrddrpi.sql
10.生成 Oracle RAC 环境下特定(多个)数据库实例的 AWR 时段对比报告:@$ORACLE_HOME/rdbms/admin/awrgdrpi.sql

--AWR小技巧
手动执行一个快照:
Exec dbms_workload_repository.create_snapshot; (这个要背出来哦,用的时候去翻手册,丢脸哦 J!)

创建一个AWR基线
Exec DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE(start_snap_id,end_snap_id ,baseline_name);

SQL> Exec DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE(start_snap_id=>57051, end_snap_id=>57052, baseline_name=>'after_upgrade11204');

PL/SQL procedure successfully completed.

@?/rdbms/admin/awrddrpt     AWR比对报告
@?/rdbms/admin/awrgrpt       RAC 全局AWR

自动生成AWR HTML报告:
http://www.oracle-base.com/dba/10g/generate_multiple_awr_reports.sql

https://oracle-base.com/dba/scripts

--AWR导出脚本:
SQL> @?/rdbms/admin/awrextr.sql

--AWR导入脚本:
SQL> @?/rdbms/admin/awrload.sql

exec dbms_swrf_internal.unregister_database('dbid'); 

--可以手动创建AWR快照
exec dbms_workload_repository.create_snapshot;

--删除AWR快照
exec dbms_workload_repository.drop_snapshot_range(low_snap_id=>300,high_snap_id=>301);

--查看AWR所有快照
select SNAP_ID,INSTANCE_NUMBER,BEGIN_INTERVAL_TIME,END_INTERVAL_TIME,SNAP_LEVEL from  dba_hist_snapshot order by 1;

--创建基线
exec dbms_workload_repository.create_baseline(start_snap_id => 309, end_snap_id => 314, baseline_name => 'EMO BASELINE');

--删除基线
exec dbms_workload_repository.drop_baseline(baseline_name=>'EMO BASELINE',Cascade=>FALSE);

注意:如果参数Cascade=>true,就会删除所有相关的快照。否则,AWR自动进程自动清除这些快照,默认是FALSE。

SELECT T.SNAP_ID
FROM SYS.WRH$_ACTIVE_SESSION_HISTORY T
GROUP BY T.SNAP_ID
ORDER BY T.SNAP_ID desc;

SELECT T.SNAP_ID
FROM SYS.WRH$_ACTIVE_SESSION_HISTORY T
GROUP BY T.SNAP_ID
ORDER BY T.SNAP_ID asc;

SELECT min(T.SNAP_ID),max(T.SNAP_ID) FROM SYS.WRH$_ACTIVE_SESSION_HISTORY T;
select dbid from v$database;

exec dbms_workload_repository.drop_snapshot_range(low_snap_id => 52670, high_snap_id => 53320, dbid => 188752074);
commit;

sqlplus /nolog
conn / as sysdba
TRUNCATE TABLE WRH$_SQLTEXT;
TRUNCATE TABLE WRH$_SQL_PLAN;

awrrpt.sql,最终是调用dbms_workload_repository.awr_report_text 或者 dbms_workload_repository.awr_report_html

-----------------------------------------批量生成awr报告
set linesize 300 ;
set pagesize 0;
set long 99999;
set heading off;
set termout off;
set echo off;
set feedback off;
set verify   off;
set timing off;
 
select
'spool ebsrac_awrrpt_'||snap_id||'_'||(snap_id+1)||'_'||dbid||'_'||instance_number||'.html'||chr(10)||
'select output '||chr(10)||
'  from table(dbms_workload_repository.awr_report_html('||dbid||','||instance_number||','||snap_id||','||(snap_id+1)||'));'||chr(10)||
'spool off;'||chr(10)
from dba_hist_snapshot
where snap_id between 59105 and 59153-1 and dbid=188752074 and instance_number=1;

spool ebsrac1_awrrpt_batch.sql
/
spool off
@ebsrac1_awrrpt_batch.sql
exit;

set linesize 300 ;
set pagesize 0;
set long 99999;
set heading off;
set termout off;
set echo off;
set feedback off;
set verify   off;
set timing off;
 
select
'spool ebsrac_awrrpt_'||snap_id||'_'||(snap_id+1)||'_'||dbid||'_'||instance_number||'.html'||chr(10)||
'select output '||chr(10)||
'  from table(dbms_workload_repository.awr_report_html('||dbid||','||instance_number||','||snap_id||','||(snap_id+1)||'));'||chr(10)||
'spool off;'||chr(10)
from dba_hist_snapshot
where snap_id between 59105 and 59153-1 and dbid=188752074 and instance_number=2;

spool ebsrac2_awrrpt_batch.sql
/
spool off
@ebsrac2_awrrpt_batch.sql
exit;
-----------------------------------------一份AWR报告分析的思路
http://www.oraclemagician.com/white_papers/10awr.pdf

1.查看等待事件
2.查看sequential read指标
3.查看Top Elapsed Time Sql
4.查看DB Time
5.查看物理读的消耗部分
6.查看logical reads
7.查看commit频率
8.查看系统负载
9.查看热对象
10.查看物理读最高的对象
赞(0) 打赏
未经允许不得转载:徐万新之路 » awr related

评论 抢沙发

联系我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫

微信扫一扫

登录

找回密码

注册