一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

如何调整Oracle AWR快照间隔和保留时间

时间:2026-08-25 09:45:48 编辑:袖梨 来源:一聚教程网

AWR快照间隔与保留时间必须用DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS修改,因retention≥interval×2且需整数分钟值,否则报ORA-13541/13516;设7天以下需先调小SYSTEM_MOVING_WINDOW基线;缩短interval至5分钟虽技术可行但生产慎用,会显著增加SYSAUX压力与采集延迟。

AWR快照间隔和保留时间必须用 DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS 修改,不能直接改表或用 ALTER SYSTEM;否则会报 ORA-13541ORA-13516 错误。

为什么 MODIFY_SNAPSHOT_SETTINGS 总是报错

最常见原因是参数不满足约束: retention 必须 ≥ interval × 2,且必须是整数分钟值。Oracle 强制校验这个关系,不是可选逻辑。

  1. retention => 7*24*60(7天)但 interval => 60(1小时),则 10080 ≥ 120 → 合法
  2. retention => 10080interval => 90 → 10080 ORA-13541
  3. 传入小数如 interval => 15.5,某些版本隐式截断为 15,有些直接报 ORA-13516;统一用整数
  4. 缺少 EXECUTE 权限也会报类似错误,不是只读权限够就行

如何安全地缩短保留时间到 7 天以下

Oracle 默认有 SYSTEM_MOVING_WINDOW 基线,其 moving_window_size(单位:分钟)不能超过 retention。想设 retention = 7 天(10080 分钟),先确认基线大小:

SELECT baseline_name, moving_window_size FROM dba_hist_baseline;

若返回 moving_window_size = 11520(即 8 天),必须先调小基线:

EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_BASELINE_WINDOW_SIZE(7);
  1. 该过程无返回值,成功即静默完成
  2. 执行后才能调用 MODIFY_SNAPSHOT_SETTINGS 设置 retention => 10080
  3. 基线大小改小后,原超出部分的基线数据会自动失效,不影响历史快照

快照间隔设成 5 分钟真的可行吗

技术上允许(interval => 5),但生产环境慎用——它不是“更精细”,而是“更高开销”。

  1. SYSAUX 表空间写入压力翻倍以上,WRH$_ACTIVE_SESSION_HISTORY 膨胀极快
  2. 快照生成本身耗时可能接近甚至超过 5 分钟(尤其高负载时),导致实际采集间隔远大于设定值
  3. AWR 报告生成变慢,awrrpt.sql 执行可能超时
  4. 仅建议在短期问题定位、性能压测期间启用,事后立刻恢复为 60 分钟

修改后怎么验证是否生效

别只看 PL/SQL 是否成功,要查视图确认真实值:

SELECT snap_interval, retention FROM dba_hist_wr_control;

注意输出格式:+00000 01:00:00.0 中的小时部分就是 interval(这里是 60 分钟),+00007 00:00:00.0 表示 retention 是 7 天。

  1. 修改立即生效,但不会清理已过期快照——老数据仍按旧策略逐步删除
  2. 如果 snap_interval 显示为 +00000 00:00:00.0,说明自动采集已关闭,不是“慢”,是“停”
  3. 手动触发一次快照:EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();,再查 dba_hist_snapshot 确认新快照 ID 是否生成

真正容易被忽略的是 SYSAUX 空间增长速度——延长 retention 或缩短 interval 后,头几天可能没异常,但一周后 WRH$_ 表碎片和归档压力会集中爆发。改之前务必跑一次空间评估查询,而不是只看当前占用。

热门栏目