Oracle AWR快照管理与常见问题

1、手动创建Snapshots

exec dbms_workload_repository.create_snapshot();
OR
BEGIN
DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT ();
END
/

2、手动删除Snapshots

exec dbms_workload_repository.drop_snapshot_range(low_snap_id => 6770,high_snap_id => 6774,dbid => 4059638244);
OR
BEGIN
dbms_workload_repository.drop_snapshot_range(low_snap_id => 6770,
high_snap_id => 6774,
dbid => 4059638244);
END
/

这种方法删除是通过delete的会产生大量redo,建议直接删除相关分区

3、修改快照设置

-----查看快照策略
SQL> col SNAP_INTERVAL format a30
SQL> col RETENTION format a30
SQL> set linesize 150
SQL> select * from dba_hist_wr_control;
DBID SNAP_INTERVAL RETENTION TOPNSQL
---------- ------------------------------ ------------------------------ ----------
2956179842 +00000 00:30:00.0 +00016 00:00:00.0 DEFAULT
------生成修改快照策略的语句
set linesize 1000 pagesize 5000
col cmd for a200
SELECT ‘exec DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(retention => 16*24*60,INTERVAL => 30,dbid => ‘ || DBID ||
‘ );‘ cmd
FROM dba_hist_wr_control;
------其他参数修改
DBMS_WORKLOAD_REPOSITORY.AWR_SET_REPORT_THRESHOLDS(
top_n_events IN NUMBER DEFAULT NULL,
top_n_files IN NUMBER DEFAULT NULL,
top_n_segments IN NUMBER DEFAULT NULL,
top_n_services IN NUMBER DEFAULT NULL,
top_n_sql IN NUMBER DEFAULT NULL,
top_n_sql_max IN NUMBER DEFAULT NULL,
top_sql_pct IN NUMBER DEFAULT NULL,
shmem_threshold IN NUMBER DEFAULT NULL,
versions_threshold IN NUMBER DEFAULT NULL);

exec DBMS_WORKLOAD_REPOSITORY.AWR_SET_REPORT_THRESHOLDS(top_n_sql=>30);
------修改快照策略
BEGIN
DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(retention => 18*24*60,
INTERVAL => 30,
dbid => 1328382724);
END
/

4、AWR生成常用脚本

-----相关脚本说明
?awrrpt.sql :生成指定快照区间的统计报表;
?awrrpti.sql :生成指定数据库实例,并且指定快照区间的统计报表;
?awrsqlrpt.sql :生成指定快照区间,指定SQL语句(实际指定的是该语句的SQLID)的统计报表;
?awrsqrpi.sql :生成指定数据库实例,指定快照区间的指定SQL语句的统计报表;
?awrddrpt.sql :指定两个不同的时间周期,生成这两个周期的统计对比报表;
?awrddrpi.sql :指定数据库实例,并指定两个的不同时间周期,生成这两个周期的统计对比报表;

--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

--10.生成特定数据库实例的 AWR 时段对比报告
@$ORACLE_HOME/rdbms/admin/awrddrpi.sql

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

5、常见问题

5.1、AWR快照数据和ASH数据未正常产生,一般是由于Oracle mman和mmnl进程异常导致的,可以尝试下列方法解决

1)、重启一下mmon的刷新 
alter system set "_swrf_mmon_flush"=false; 
alter system set "_swrf_mmon_flush"=true;
2)、或者,找到mmon进程杀掉,让数据库自动重启一个新的mmon进程,或者重启下实例。 
ps -ef|grep mmon 
kill -9 xxxxxx

MMON负责执行与AWR相关的任务。包括收集数据库统计信息,收集AWR快照,启动各种自动维护作业JOB,生成超过阀值告警信息。
MMNL负责执行与ASH相关的任务。

5.2、生成awr报告时报错,抛出ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小
ERROR:
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: at "SYS.DBMS_WORKLOAD_REPOSITORY", line 919
ORA-06512: at line 1
解决方法:

1、截断sql_text
update WRH$_SQLTEXT set sql_text = SUBSTR(sql_text, 1, 1000);
commit;
2、补丁13527323
Patch 13527323
3、 Use following workaround:
sqlplus / as sysdba
@$ORACLE_HOME/rdbms/admin/prvsawr.plb
@$ORACLE_HOME/rdbms/admin/prvtawr.plb

5.3、SYSAUX表空间中WRH$_ACTIVE_SESSION_HISTORY占用大量空间

SELECT owner,
segment_name,
partition_name,
segment_type,
bytes/1024/1024/1024 Size_GB
FROM dba_segments
WHERE segment_name=‘WRH$_ACTIVE_SESSION_HISTORY‘;
--修改参数手动出发AWR表的新分区生成
alter session set "_swrf_test_action" = 72;
--通过下列脚本获取AWR分区对应的快照ID
set serveroutput on
declare
CURSOR cur_part IS
SELECT partition_name from dba_tab_partitions
WHERE table_name = ‘WRH$_ACTIVE_SESSION_HISTORY‘; 

query1 varchar2(200);
query2 varchar2(200); 

TYPE partrec IS RECORD (snapid number, dbid number);
TYPE partlist IS TABLE OF partrec; 

Outlist partlist;
begin
dbms_output.put_line(‘PARTITION NAME SNAP_ID DBID‘);
dbms_output.put_line(‘--------------------------- ------- ----------‘); 

for part in cur_part loop
query1 := ‘select min(snap_id), dbid from sys.WRH$_ACTIVE_SESSION_HISTORY partition (‘||part.partition_name||‘) group by dbid‘;
execute immediate query1 bulk collect into OutList;
if OutList.count > 0 then
for i in OutList.first..OutList.last loop
dbms_output.put_line(part.partition_name||‘ Min ‘||OutList(i).snapid||‘ ‘||OutList(i).dbid);
end loop;
end if;
query2 := ‘select max(snap_id), dbid from sys.WRH$_ACTIVE_SESSION_HISTORY partition (‘||part.partition_name||‘) group by dbid‘;
execute immediate query2 bulk collect into OutList;
if OutList.count > 0 then
for i in OutList.first..OutList.last loop
dbms_output.put_line(part.partition_name||‘ Max ‘||OutList(i).snapid||‘ ‘||OutList(i).dbid);
dbms_output.put_line(‘---‘);
end loop;
end if; 

end loop;
end;
/
----通过DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE包删除快照信息,但是会产生大量的redo
直接删除相关分区更为便捷和迅速恢复业务
alter table WRH$_ACTIVE_SESSION_HISTORY drop partition WRH$_ACTIVE_692952975_0;

6、快速收集AWR/ASH/ADDM脚本

-------快速收集AWR
declare
begin_time_date date := to_date(‘20141130 23:00:00‘, ‘yyyymmdd hh24:mi:ss‘) ;
end_time_date date := to_date(‘20141203 18:00:00‘, ‘yyyymmdd hh24:mi:ss‘) ;
begin
dbms_output.put_line(‘set linesize 2000‘);
dbms_output.put_line(‘set pagesize 50000‘);
dbms_output.put_line(‘set head off‘);
for r in (select *
from sys.WRM$_SNAPSHOT t
where t.begin_interval_time >begin_time_date
and t.begin_interval_time< end_time_date
and t.dbid=3628304518
order by t.snap_id, t.instance_number)
loop
dbms_output.put_line(‘spool awrrpt_‘ || r.instance_number || ‘_‘ ||
to_char(r.begin_interval_time+1/24,‘mmdd_hh24mi‘) || ‘_‘ ||to_char(r.end_interval_time+1/24,‘mmdd_hh24mi‘) || ‘.html‘);
dbms_output.put_line(‘select *
from table
(dbms_workload_repository.awr_report_html(‘ ||
r.dbid || ‘,‘ || r.instance_number || ‘,‘ ||
r.snap_id || ‘,‘ || (r.snap_id + 1) || ‘,0));‘);
dbms_output.put_line(‘spool off‘);
end loop;
end;
---------快速收集ASH
declare
begin_time_date date := to_date(‘20141130 23:00:00‘,
‘yyyymmdd hh24:mi:ss‘);
end_time_date date := to_date(‘20141203 13:00:00‘,
‘yyyymmdd hh24:mi:ss‘);
interval_minutes number := 60;
begin
dbms_output.put_line(‘set linesize 2000‘);
dbms_output.put_line(‘set pagesize 50000‘);
dbms_output.put_line(‘set head off‘);
for r in (select db.DBID,
ins.INSTANCE_NUMBER,
begin_time_date + interval_minutes * (lv - 1) / 1440 begin_time_date,
begin_time_date + interval_minutes * lv / 1440,
‘yyyymmdd hh24:mi:ss‘ end_time_date,
to_char(begin_time_date + 60 * (lv - 1) / 1440,
‘yyyymmddhh24mi‘) begin_time,
to_char(begin_time_date + 60 * lv / 1440,
‘yyyymmddhh24miss‘) end_time
from (select /*+ no_merge*/
level lv
from dual
connect by level <= (end_time_date - begin_time_date) * 60 * 24 /
interval_minutes),
gv$instance ins,
v$database db) loop
dbms_output.put_line(‘spool ashrpt_‘ || to_char(r.instance_number) || ‘_‘ ||
r.begin_time || ‘-‘ || r.end_time || ‘.html‘); 

dbms_output.put_line(‘select output from table(dbms_workload_repository.ash_report_html( ‘ ||
r.dbid || ‘ , ‘ || r.instance_number || ‘ , ‘ ||
‘to_date(‘ || ‘‘‘‘ || r.begin_time ||
‘‘‘, ‘‘yyyymmddhh24miss‘‘‘ || ‘)‘ || ‘ , ‘ ||
‘to_date(‘ || ‘‘‘‘ || r.end_time ||
‘‘‘, ‘‘yyyymmddhh24miss‘‘‘ || ‘)));‘); 

dbms_output.put_line(‘spool off ‘);
end loop;
end;
---------------快速收集ADDM
declare
begin_time_date date := to_date(‘20141109 15:00:00‘, ‘yyyymmdd hh24:mi:ss‘) ;
end_time_date date := to_date(‘20141109 19:00:00‘, ‘yyyymmdd hh24:mi:ss‘) ;

begin
dbms_output.put_line(‘set linesize 100‘);
dbms_output.put_line(‘set pagesize 50000‘);
dbms_output.put_line(‘set head off‘);
dbms_output.put_line(‘serveroutput ON SIZE UNLIMITED ‘);
dbms_output.put_line(‘spool addm.txt‘);
for r in (select *
from sys.WRM$_SNAPSHOT t
where t.begin_interval_time >=begin_time_date
and t.begin_interval_time<= end_time_date
order by t.snap_id, t.instance_number)

loop
dbms_output.put_line(‘declare
id number ;
name varchar2(100) ;
v_dec varchar2(200) :=‘||‘‘‘addm_‘||to_char(r.snap_id)||‘_‘||to_char(r.snap_id+1)||‘‘‘;‘);
dbms_output.put_line( ‘begin ‘) ;
dbms_output.put_line( ‘dbms_advisor.create_task(‘‘ADDM‘‘,id,name,v_dec,null);‘);
dbms_output.put_line( ‘dbms_advisor.set_task_parameter(name, ‘||‘‘‘START_SNAPSHOT‘‘,‘||r.snap_id||‘);‘) ;
dbms_output.put_line( ‘dbms_advisor.set_task_parameter(name, ‘ ||‘‘‘END_SNAPSHOT‘‘,‘||to_char(r.snap_id+1)||‘);‘) ;
dbms_output.put_line( ‘dbms_advisor.set_task_parameter(name, ‘||‘‘‘INSTANCE‘‘,‘||r.instance_number||‘);‘) ;
dbms_output.put_line( ‘dbms_advisor.set_task_parameter(name, ‘||‘‘‘DB_ID‘‘,‘||r.dbid||‘);‘) ;
dbms_output.put_line( ‘dbms_advisor.execute_task(name); ‘) ;
dbms_output.put_line(‘dbms_output.put_line(‘||‘‘‘#spool addm_‘ || r.instance_number || ‘_‘ ||
r.snap_id || ‘_‘ || (r.snap_id + 1) || ‘.txt‘‘);‘);
dbms_output.put_line(‘dbms_output.put_line(‘||‘‘‘#select dbms_advisor.get_task_report(‘‘‘‘‘‘‘||‘||name||‘‘‘‘‘‘,‘
||‘‘‘‘‘TEXT‘‘‘‘,‘‘‘‘TYPICAL‘‘‘‘) from dual ;‘‘);‘);
dbms_output.put_line(‘dbms_output.put_line(‘‘#spool off‘‘);‘);
dbms_output.put_line(‘end ;
/‘);
end loop;
dbms_output.put_line(‘spool off‘);
end
/

参考文档:
AWR Diagnostic Collection Script (Doc ID 733655.1)
Getting ORA-06502 and ORA-06512 Errors When Running AWR Report in HTML Format (Doc ID 2231743.1)
How To Avoid the AWR Usage Without Having Diagnostic Pack License (Doc ID 2276199.1)
WRH$_ACTIVE_SESSION_HISTORY Does Not Get Purged Based Upon the Retention Policy (Doc ID 387914.1)

原文地址:https://www.cnblogs.com/lYng/p/9442041.html

时间: 2024-11-10 12:48:14

Oracle AWR快照管理与常见问题的相关文章

Oracle AWR管理与维护

??AWR是Automatic Workload Repository的简称,中文叫着自动工作量资料档案库.对于AWR的管理,主要是针对快照和基线的管理而言.比如设定快照的间隔,删除快照,设定快照的保留时间.那对于基线而言则是基线的创建,删除,自动创建等.本文主要描述这2部分的内容. 一.快照管理 ??默认情况下,Oracle数据库每小时生成一次快照,并在工作负载库中保留8天的统计信息.必要时,你可以使用dbms_workload_repository程序手动创建,删除或者修改快照等.可以使用O

(转载)Oracle AWR报告指标全解析

Oracle AWR报告指标全解析 2014-10-16 14:48:04 分类: Oracle [性能调优]Oracle AWR报告指标全解析 2013/08/31 BY MACLEAN LIU 26条评论 [性能调优]Oracle AWR报告指标全解析 开Oracle调优鹰眼,深入理解AWR性能报告:http://www.askmaclean.com/archives/awr-hawk-eyes-training.html 开Oracle调优鹰眼,深入理解AWR性能报告 第二讲: http:

通过案例学调优之--AWR BaseLine管理

通过案例学调优之--AWR BaseLine管理 BaseLine Baseline 是指一个特定时间段内的性能数据,保留这些数据是为了在性能问题产生时与其他类似的工作负载时间段进行比较.Baseline 中包含的快照将从自动 AWR 清理进程中排除,并无限期的保留. 在 Oracle Database 中存在多种类型的 baseline:      Fixed Baseline:fixed baseline 表示的是您指定的一个固定的.连续的时间段.在创建 fixed baseline 之前,

Oracle AWR ASH

AWR基础知识1.自动工作负荷仓库Oracle收集了大量与性能和动作相关的统计信息.这些信息在内存中累加,并且有规律地写入磁盘(也就是写入构成AWR的表).最终,这些信息会过期并被重写.1.1.收集统计量统计量收集的级别由实例参数STATISTICS_LEVEL控制.这个参数可能被设置为BASIC.TYPICAL或ALL.(默认TYPICAL) TYPICAL:允许收集正常调整所需的所有统计量,同时不会收集对性能有不良影响的统计量集合. BASIC:事实上禁止收集统计量,并且不存在可评估的性能优

Oracle AWR报告指标解析一例

啥是AWR? ===================================================================================================== AWR (Automatic Workload Repository) 一堆历史性能数据,放在SYSAUX表空间上, AWR和SYSAUX都是10g出现的,是Oracle调优的关键特性: 大约1999年左右开始开发,已经有15年历史 默认快照间隔1小时,10g保存7天.11g保存8

oracle AWR详解

原文地址:https://blog.csdn.net/elvis_lfc/article/details/52326148 啥是AWR? ===================================================================================================== AWR (Automatic Workload Repository) 一堆历史性能数据,放在SYSAUX表空间上, AWR和SYSAUX都是10g出现的,是

ORACLE AWR报告生成步骤

ORACLE AWR报告生成步骤 (以PL/SQL中命令窗口为例) 1.sqlplus或plsql的commod窗口(命令窗口)运行命令 @D:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\awrrpt.sql; -- 具体地址,需要查询得到 --然后在弹出的对话框中输入选择的导出格式html或者txt,一般用html,生成的报告用浏览器查看比较方便. 2.在弹出的对话框中输入数字选择制定选择快照的数量 3.在接下来弹出的对话框中分别选择最小和最大snap_id

[转]oracle awr报告生成和分析

转自:http://blog.csdn.net/cuker919/article/details/8767328 最近由于数据库cpu占用非常高,导致VCS常常自动切换,引起很多问题. 最近学习一下数据库awr分析数据库sql执行性能的分析报告.下面将初步讲解一下: 1.先登陆数据库,生成awr报告. linux:~ # su - oracle[email protected]:~> sqlplus '/as sysdba' SQL*Plus: Release 11.1.0.6.0 - Prod

[转]Oracle AWR(Automatic Workload Repository)使用解析

一. AWR 说明 Oracle 10g之前对数据库做性能检测使用statspack工具. 关于statspack的说明,参考我的Blog: statspack安装使用 和 report 分析 http://space.itpub.net/28673746/viewspace-757339 Oracle Database 10g 提供了一个新的工具:(AWR:Automatic Workload Repository).Oracle 建议用户用这个取代 Statspack.AWR 实质上是一个