AWR(Automatic Workload Repository)是Oracle数据库性能分析的"黄金标准",但多数DBA仅停留在"看报告"的初级阶段。更危险的是,一些看似合理的操作习惯,实则隐藏着致命误区---它们让性能优化事倍功半,甚至导致系统性风险!
误区1:盲目依赖"Top事件"
问题本质:多数DBA打开AWR报告直奔"Top 10 Timed Events",却忽略了一个致命逻辑:高等待事件≠根本原因。
案例1
CPU飙高99%,凶手竟是一张"正常"的索引!
某电商大促期间,数据库CPU持续飙高,但Top SQL无明显异常。 表面现象:AWR显示"DB CPU"占比85%,Top SQL均为简单查询(单次执行0.1秒);
深度排查
检查Segments by Logical Reads,发现某订单表的逻辑读高达1200万/秒;
结合Segment Statistics,发现该表的唯一索引因分区迁移变为UNUSABLE状态;
根因分析
索引失效导致所有DML操作触发全表扫描,同时引发隐式索引重建,累计消耗72%的CPU资源。
破局关键
交叉验证SQL Statistics与Segment/Index Stats;
关注User I/O Wait与Cluster Wait的关联性;
使用ASH报告补充分析短时高频SQL。
案例2
RAC环境下的"幽灵等待"
某银行核心系统频繁出现"gc cr block busy"等待事件,但AWR显示各节点负载均衡。
隐藏线索
Cluster Wait Class占比突增至40%; Global Cache Block Access Latency超50ms(正常值<10ms);
真相浮现
某分区表的HASH分布键设计不合理,导致90%的跨节点数据请求。
破局关键
使用AWR RAC报告(awrgrpt.sql)分析全局缓存效率; 优化分区策略,将热数据分区对齐节点物理分布。
误区2:默认采样周期"埋雷"
核心问题:AWR默认60分钟采样间隔,会过滤短时高频的"性能尖刺",导致偶发故障成为"无头悬案"。
案例3
每日凌晨2分钟的"死亡卡顿",某支付系统每日凌晨交易响应时间突增,但常规AWR无异常。
问题本质
AWR默认的60分钟采样周期和统计阈值,会过滤掉短时高频的"性能尖刺"。
根治方案
sql
将awr_snapshot_interval从60分钟改为20分钟:
EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(interval => 20);
发现enq: TX - row lock contention在2分钟内激增至800次/秒;
溯源至某个批量作业未提交事务,阻塞了高频SELECT ... FOR UPDATE。
使用ASH(Active Session History)追踪锁争用链
SELECT session_id, event, blocking_session, sql_id
FROM v$active_session_history
WHERE sample_time
BETWEEN '2025-01-01 00:00:00' AND '2025-01-01 00:05:00';
误区3:忽视历史基线对比
单份AWR报告如同"静态快照",无法捕捉"温水煮青蛙"式的性能劣化,优化方向南辕北辙!
案例4
硬解析暴涨1200%,系统为何"突然"崩溃? 某政务系统响应时间每月增长8%,但单次AWR分析"一切正常"。
基线对比
使用AWR Diff报告(awrddrpt.sql)对比3个月数据:
硬解析次数从200次/小时增至2400次/小时; Library Cache Hit Ratio从99.5%降至92.3%;
根因定位
某ORM框架动态生成SQL(如WHERE id IN (1,2,3,...)),导致绑定变量失效。
破局关键
建立性能基线库,定期执行AWR Diff分析:@?/rdbms/admin/awrddrpt.sql
监控Time Series Metrics(如Parse/Execute比率、Logical Read增长斜率);
对"温水煮青蛙"型问题设置阈值预警(如每小时硬解析>500次触发告警)
误区4:过度关注SQL优化
DBA往往聚焦SQL调优,却忽略AWR中隐藏的系统级配置错误。
案例5
内存参数错误,每秒引发300次磁盘排序,某ERP系统批量作业缓慢,AWR显示direct path read等待。
深度分析
PGA Aggregated Target设置仅5GB,但实际需求为10GB;
workarea_size_policy为MANUAL,导致大量排序操作溢出到临时表空间;
性能影响:每秒超过300次磁盘排序,批量作业耗时增加4倍。
调优方案
sql
动态调整PGA参数:
ALTER SYSTEM SET pga_aggregate_target=8G SCOPE=BOTH;
ALTER SYSTEM SET workarea_size_policy=AUTO SCOPE=BOTH;
监控PGA使用效率:
SELECT * FROM v$pgastat WHERE name
IN ('aggregate PGA target parameter','total PGA allocated');
如何成为高手
从"救火队员"到"先知架构师"的蜕变,AWR的价值远不止于"事后分析",它更是预防性运维的核心武器。
sql
数据联动:AWR + ASH + ADDM + 基线库构建"四位一体"监控体系;
动态策略:根据业务特征定制采样频率、阈值和对比基线;
工具武装:
使用SQLHC(SQL Health Check)深度分析问题SQL;
通过OraStatPack自动化提取关键指标趋势;
开发自定义脚本监控AWR元数据(如dba_hist_snapshot)。
当90%的DBA还在"截图写报告"时,顶尖专家已用AWR构建起性能免疫系统------你的选择,决定了数据库在下一场流量洪峰前是"轰然崩塌"还是"稳如磐石"。