awr基线本身不触发预警,仅作为静态参考;需配合addm自动诊断或自定义sql监控脚本才能实现性能异常预警。

AWR基线本身不触发预警,它只是静态参考系;真要实现性能异常预警,必须配合ADDM自动诊断或自定义SQL监控脚本,基线只提供比对依据。
为什么直接用DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE不等于预警
基线创建后,Oracle不会主动拿它做实时比对。它只是把一段快照区间(比如上周三晚高峰)的数据“冻结”存进DBA_HIST_BASELINE,后续生成AWR报告时可选它作对比源,但不会自动告警。常见误解是以为设了基线就等于加了监控——实际它连定时任务都不是。
-
CREATE_BASELINE只是写入元数据,不启动任何后台进程 - 基线快照不会延长保留期,除非显式设置
cascade => TRUE,否则删除基线时快照仍可能被自动清理 - 基线名称不能含空格或特殊字符,否则
awrrpti.sql交互式工具会报ORA-13507
用ADDM+基线组合实现准实时预警的实操路径
ADDM在每次快照生成后自动运行(默认开启),它能基于当前快照与指定基线做差异分析。但注意:ADDM只在STATISTICS_LEVEL = TYPICAL或ALL时生效,BASIC下完全不工作。
- 先建一个稳定基线:
EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE(start_snap_id => 12345, end_snap_id => 12350, baseline_name => 'WEEKLY_PEAK'); - 确认ADDM启用:
SELECT value FROM v$parameter WHERE name = 'statistics_level';必须返回TYPICAL - 检查ADDM任务是否绑定基线:查
DBA_ADVISOR_TASKS里ADDM类型任务的DESCRIPTION字段,含baseline字样才有效 - ADDM报告中出现
Comparison with baseline WEEKLY_PEAK shows 35% increase in db file sequential read time这类语句,才是预警信号落地点
绕过ADDM、用SQL脚本做轻量级基线偏差监控
如果ADDM资源开销敏感,可用定时SQL查DBA_HIST_SNAPSHOT和DBA_HIST_SYSMETRIC_SUMMARY,手动比对关键指标。重点盯三个易突变维度:
-
PHYSICAL_READS_TOTAL:对比基线区间均值,当前快照值超2倍标准差即告警 -
DB_TIME:从DBA_HIST_SYS_TIME_MODEL取值,避免只看CPU掩盖等待问题 -
LOGONS_PER_SEC:业务层抖动常先反映在连接数上,比SQL执行时间更前置 - 脚本需过滤
SNAP_ID有效性,DBA_HIST_SNAPSHOT里STATUS = 0才代表快照完整
容易被忽略的基线陷阱:时间窗口漂移与实例绑定
RAC环境下,CREATE_BASELINE默认只作用于当前连接实例。如果没在所有节点执行,或用GV$视图查基线,会发现不同实例看到的基线快照ID范围不一致——这会导致ADDM分析结果错位。
- 多实例基线必须逐个实例执行
CREATE_BASELINE,不能依赖广播 - 基线时间窗口必须避开AWR自动清理周期,查
DBA_HIST_WR_CONTROL的RETENTION字段,确保基线覆盖时段仍在保留期内 - 用
awrrpti.sql生成跨实例报告时,若选错实例号,基线对比数据会来自错误节点的快照











