Oracle AWR管理与快照操作完整指南
1. AWR简介与开启方法
AWR(Automatic Workload Repository)是Oracle数据库的性能诊断工具,它能自动收集、处理和维护性能统计信息。AWR默认情况下是开启的,但我们可以通过以下方式确认和管理其状态。
检查AWR状态
-- 检查AWR快照设置
SELECT * FROM DBA_HIST_WR_CONTROL;-- 检查快照保留策略
SELECT * FROM DBA_HIST_SNAPSHOT ORDER BY SNAP_ID;
开启/关闭AWR
-- 修改AWR快照设置(开启)
BEGINDBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(retention => 11520,    -- 保留时间(分钟),8天interval  => 60        -- 快照间隔(分钟));
END;
/-- 关闭AWR快照(不推荐)
BEGINDBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(interval  => 0         -- 设置为0关闭自动快照);
END;
/
2. AWR快照管理
手动创建快照
-- 创建手动快照
EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();-- 创建快照并返回快照ID
DECLAREsnap_id NUMBER;
BEGINsnap_id := DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();DBMS_OUTPUT.PUT_LINE('创建的快照ID: ' || snap_id);
END;
/
查看快照详情
-- 查看所有快照信息
SELECT snap_id, begin_interval_time, end_interval_time,startup_time
FROM sys.wrm$_snapshot 
ORDER BY snap_id;-- 查看最近24小时的快照
SELECT snap_id, begin_interval_time, end_interval_time
FROM sys.wrm$_snapshot 
WHERE begin_interval_time >= SYSDATE - 1
ORDER BY snap_id;
删除快照
-- 删除单个快照
EXEC DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE(low_snap_id => 612, high_snap_id => 612);-- 删除快照范围(如示例中的612到700)
EXEC DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE(low_snap_id => 612, high_snap_id => 700);-- 删除特定时间范围的快照
DECLAREmin_snap_id NUMBER;max_snap_id NUMBER;
BEGINSELECT MIN(snap_id), MAX(snap_id)INTO min_snap_id, max_snap_idFROM sys.wrm$_snapshotWHERE begin_interval_time BETWEEN TO_DATE('2024-01-01', 'YYYY-MM-DD') AND TO_DATE('2024-01-31', 'YYYY-MM-DD');DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE(low_snap_id => min_snap_id, high_snap_id => max_snap_id);
END;
/
3. 生成AWR报告的方法
方法一:使用awrrpt.sql脚本(最常用)
-- 在SQL*Plus中执行
@$ORACLE_HOME/rdbms/admin/awrrpt.sql-- 或者指定完整路径
@?/rdbms/admin/awrrpt.sql
执行步骤:
- 选择报告类型(HTML或TEXT)
 - 输入快照天数或直接按回车查看所有可用快照
 - 选择开始快照ID
 - 选择结束快照ID
 - 指定报告输出文件名
 
方法二:使用DBMS_WORKLOAD_REPOSITORY包
-- 生成HTML格式的AWR报告
SELECT OUTPUT
FROM TABLE(DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML(l_dbid => (SELECT dbid FROM v$database),l_inst_num => (SELECT instance_number FROM v$instance),l_bid => 612,        -- 开始快照IDl_eid => 700         -- 结束快照ID
));-- 生成TEXT格式的AWR报告
SELECT OUTPUT
FROM TABLE(DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_TEXT(l_dbid => (SELECT dbid FROM v$database),l_inst_num => (SELECT instance_number FROM v$instance),l_bid => 612,l_eid => 700
));
方法三:生成指定时间段的AWR报告
-- 基于时间范围生成AWR报告
VARIABLE report_clob CLOB;BEGIN:report_clob := DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML((SELECT dbid FROM v$database),(SELECT instance_number FROM v$instance),NULL,  -- 使用时间范围而不是快照IDTO_DATE('2024-01-01 10:00:00', 'YYYY-MM-DD HH24:MI:SS'),TO_DATE('2024-01-01 11:00:00', 'YYYY-MM-DD HH24:MI:SS'));
END;
/-- 查看报告内容
SELECT :report_clob FROM DUAL;
方法四:保存AWR报告到文件
-- 使用SPOOL命令保存报告
SET PAGESIZE 0
SET LINESIZE 1000
SET LONG 1000000
SET LONGCHUNKSIZE 1000000SPOOL /tmp/awr_report_612_700.htmlSELECT OUTPUT
FROM TABLE(DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML((SELECT dbid FROM v$database),(SELECT instance_number FROM v$instance),612,700
));SPOOL OFF
4. 其他类型的AWR报告
生成比较AWR报告(AWR Diff Report)
-- 比较两个时间段的性能
@$ORACLE_HOME/rdbms/admin/awrddrpt.sql-- 或者使用包
SELECT OUTPUT
FROM TABLE(DBMS_WORKLOAD_REPOSITORY.AWR_DIFF_REPORT_HTML((SELECT dbid FROM v$database),(SELECT instance_number FROM v$instance),600, 610,  -- 第一个时间段700, 710   -- 第二个时间段
));
生成SQL报告
-- 针对特定SQL生成报告
@$ORACLE_HOME/rdbms/admin/awrsqrpt.sql
生成Segment报告
-- 生成段级统计信息报告
@$ORACLE_HOME/rdbms/admin/awrrpt.sql
5. AWR配置最佳实践
推荐配置
-- 设置合理的AWR参数
BEGINDBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(retention => 40320,    -- 28天保留期interval  => 60,       -- 每小时快照topnsql   => 100       -- 保留TOP 100 SQL);
END;
/-- 对于高负载系统
BEGINDBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(retention => 20160,    -- 14天保留期interval  => 30,       -- 每30分钟快照topnsql   => 200);
END;
/
空间管理
-- 检查AWR空间使用情况
SELECT * FROM DBA_HIST_SNAPSHOT 
ORDER BY snap_id DESC;-- 估算AWR空间需求
SELECT * FROM DBA_HIST_SNAPSHOT 
WHERE begin_interval_time >= SYSDATE - 7;
6. 实用监控脚本
快照监控
-- 监控快照生成频率
SELECT TO_CHAR(begin_interval_time, 'YYYY-MM-DD HH24:MI') as snapshot_time,snap_id,(end_interval_time - begin_interval_time) * 24 * 60 as duration_minutes
FROM sys.wrm$_snapshot 
WHERE begin_interval_time >= SYSDATE - 1
ORDER BY snap_id DESC;-- 验证删除操作后的快照状态
SELECT snap_id, begin_interval_time, end_interval_time 
FROM sys.wrm$_snapshot 
ORDER BY snap_id;
查找可用快照
-- 查找特定时间段的快照
SELECT snap_id, begin_interval_time, end_interval_time
FROM dba_hist_snapshot
WHERE begin_interval_time BETWEEN SYSDATE - 7 AND SYSDATE
ORDER BY snap_id;
7. 注意事项
- 权限要求:操作AWR需要
DBA角色或相应的系统权限 - 空间考虑:定期清理旧快照以避免SYSAUX表空间膨胀
 - 性能影响:频繁的快照可能对系统性能产生轻微影响
 - 业务时段:避免在业务高峰期进行大量快照删除操作
 - 报告解读:AWR报告包含大量信息,需要熟悉关键指标如:
- 负载配置文件(Load Profile)
 - 实例效率百分比(Instance Efficiency Percentages)
 - 等待事件(Top 5 Timed Events)
 - SQL统计信息(SQL Statistics)
 
 
通过合理配置和管理AWR快照,并熟练掌握AWR报告的生成方法,可以有效地监控和诊断数据库性能问题,同时控制存储空间的合理使用。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/955829.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!