05-十分钟读懂AWR报告

📅 2026/7/27 2:20:31
05-十分钟读懂AWR报告
10分钟读懂AWR报告——不看200页就看3个地方AWR报告动辄几十页新人一打开就放弃了。其实80%的瓶颈藏在三个地方Top SQL、等待事件、IO负载。这篇文章结合社保系统的实际AWR案例告诉你哪几节值得看、看到什么该警觉。文章目录10分钟读懂AWR报告——不看200页就看3个地方一、AWR是什么二、第一眼看Top 10 等待事件三、第二眼看Top SQL四、第三眼看IO负载五、不需要看的那些页六、快速诊断命令不用AWR报告一、AWR是什么AWRAutomatic Workload Repository是Oracle 10g起自带的性能快照——每小时自动采集一次数据库的运行状态存入SYSAUX表空间。生成一份AWR报告-- 先查有哪些快照SELECTSNAP_ID,BEGIN_INTERVAL_TIME,END_INTERVAL_TIMEFROMDBA_HIST_SNAPSHOTORDERBYSNAP_IDDESC;-- 生成HTML报告SNAP_ID 用实际值替换?/rdbms/admin/awrrpt.sql报告生成在当前目录下是一个HTML文件。二、第一眼看Top 10 等待事件打开报告搜“Top 10 Foreground Events”——这是第一段要看的。正常健康系统的等待事件分布等待事件占比说明DB CPU40-60%CPU在处理SQL正常db file sequential read15-25%索引读正常db file scattered read5-15%全表扫描读偏高要警惕log file sync1-5%事务提交日志写警觉信号等待事件占比问题log file sync 10%事务提交太频繁COMMIT太多批量提交或关闭autocommitenq: TX - row lock contention行锁等待有人在select…for update没释放enq: TX - allocate ITLITL槽不够增加表的INITRANSbuffer busy waits热块争用反序主键或Hash分区read by other sessionIO跑不动加大buffer cache或换SSD社保系统有一次log file sync占了35%。查原因——银行回调接口每笔扣款都单独COMMIT150笔就是150次日志刷盘。改成批量提交50笔COMMIT一次降到3%。三、第二眼看Top SQL搜“SQL ordered by Elapsed Time”——这是第二段。关注三个指标指标含义警戒值Elapsed Time (s)总耗时单条超过几百秒Executions执行次数高频高耗时头号目标Elapsed per Exec (s)单次耗时超过1秒就要看-- 从AWR直接查Top SQL不用报告SELECTSQL_ID,ROUND(ELAPSED_TIME_DELTA/1000000,2)ASTOTAL_SEC,EXECUTIONS_DELTAASEXECS,ROUND(ELAPSED_TIME_DELTA/DECODE(EXECUTIONS_DELTA,0,1,EXECUTIONS_DELTA)/1000000,4)ASAVG_SECFROMDBA_HIST_SQLSTATWHERESNAP_ID快照IDORDERBYELAPSED_TIME_DELTADESCFETCHFIRST10ROWSONLY;找到SQL_ID后看执行计划SELECT*FROMTABLE(DBMS_XPLAN.DISPLAY_AWR(SQL_ID));四、第三眼看IO负载搜“Tablespace IO Stats”和“File IO Stats”。关注Av Rd(ms)——单次读的平均毫秒数延迟含义1msSSD飞一样1-5ms普通SAN正常5-10ms有点慢了10ms磁盘是瓶颈考虑加大buffer cache或换存储社保系统有一次Av Rd(ms)飙到25ms——查原因是归档日志和数据文件放在了同一块机械盘上两者抢IO。把归档日志移到独立磁盘后降到5ms。五、不需要看的那些页Load Profile——知道就行不调参不用看Instance Efficiency Percentages——命中率都是骗人的buffer hit 99%不代表SQL写得好可能是反复扫同一块Advisory Section——参考价值有限Oracle建议的内存值通常是实际需要的2倍Wait Class——太粗直接看等待事件更准六、快速诊断命令不用AWR报告-- 当前等待事件SELECTEVENT,COUNT(*)FROMV$SESSIONWHEREWAIT_CLASSIdleGROUPBYEVENTORDERBY2DESC;-- 当前活跃SQLSELECTSQL_ID,SQL_FULLTEXTFROMV$SQLWHERESQL_IDIN(SELECTSQL_IDFROMV$SESSIONWHERESTATUSACTIVE);-- 锁等待关系谁在等谁SELECTHOLDING_SESSION,WAITING_SESSION,MODE_HELD,MODE_REQUESTEDFROMDBA_WAITERS;✅ 亮点不逐页解释AWR报告直接用社保系统的真实诊断案例log file sync 35%、IO 25ms延迟讲重点看哪里、看到什么数字该警觉。扩展方向ASH报告实时诊断、SQL Tuning Advisor自动化优化。