取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.查看物理读最高的对象
awr related
未经允许不得转载:徐万新之路 » awr related
最新评论
这个牛
放下欲望,男人从来不醉,充分且必要
勇气、责任、自信、创新,为天下先!
软件即数据,软件即服务,软件即管理,软件就是对人类各种社会活动的仿真和记录。软件很重要,但软件不可能凌驾于业务之上,尤其不可能高人一等。