有过几年工作经验的Oracle DBA都不会对AWR报告陌生,不会看AWR报告的DBA遇到一些性能、BUG方面的问题,就只能东一榔头西一锤子乱敲乱打,而依托AWR可以快速定位问题所在。这些年Oracle的AWR报告的功能越来越丰富,甚至把ASH的数据也都集成进来了,这样就弥补了AWR侧重于宏观而无法下钻微观的不足。
AWR报告的内容虽好,但是读起来不太容易,如果对Oracle的一些内在原理不甚了解,那么就只能浅浅地读一下,抓住一些关键的问题。对于一些比较明显的问题,可能只简单的针对load profile、wait event、top sql等章节做个简单的阅读就可以大体抓住问题的关键了,不过对于一些特别复杂的问题,可能就需要十分深入的阅读了。
一般情况下,load profile和 wait event都是发现总体问题的关键数据,首先要认真阅读分析,找出相关的要点。而其他的数据则可以帮你确认问题是否存在于你发现的点上,因此也是需要相互印证,才能准确定位问题的。

如果你定位的问题在IO上,那么IO profile可以告诉IO负载的总体情况,再对照后面的IO详细信息的章节,就可以判断是IO负载过载了还是IO负载不大,但是延时过高导致了系统问题 ,如果是负载过大,那么优化SQL和DB CACHE就可以缓解问题,而如果负载不大的情况下延时过高,那么一定要分析清楚,否则你简单的去优化了几条SQL,暂时解决了问题,未来还是存在再出问题的风险的。

内存和cache的状态是大家都觉得没啥用的数据,其实不然,根据begin/end的变化可以了解缓冲池是否存在抖动,很多SGA相关的性能问题都是和缓冲池抖动相关的。其实这里的每个指标都是很有价值的,比如% SQL with executions>1可以看出shared pool的CURSOR共享效率,如果共享效率较低,那么解析相关的性能问题可能会出现,% Memory for SQL w/exec>1则对于SQL共享与共享池内存占用之间的关系分析十分有价值,对于共享池两位一方面的性能问题的定位十分有价值。

Time Model是一个和等待事件、Wait Event一样重要的数据,只是以前被大家忽视了。Time Model的出现是Oracle可观测性能力提升的一个十分重要的里程碑,Time Model是Oracle 10g开始,AWR出现后才有的,在其前身的Statspack报告中并不存在,不过当年Oracle用于分析statspack报告的内部分析工具PTA就是以Time Model为核心的。只不过不同业务类型、不同负载类型的系统Time Model的基准差异很大,因此很难找到分析基准,所以这部分数据的利用不多。一种比较简单的 方法是一套系统正常情况下的Time Model和异常情况下的Time Model进行比较,从中发现差异。很多DBA从Wait Event中找到异常的等待事件就认为问题出在哪了,其实不尽然,有可能你发现的问题只集中在几条与你的故障无关的SQL上,并非影响系统问题的元凶,而Time Model就是你纠偏的关键。如果问题是全局性的而非局部性的,那么出问题的等待事件在Time Model中的占比就是评价其是否是解决问题的关键的重要依据。
今天这篇文章不是用来解析AWR数据的,这方面的文章这些年我也写过十几篇了,大家有兴趣可以去找找。今天要说的事情就是我们应该深入挖掘AWR报告的价值,把这个宝库充分利用起来。AWR浑身都是宝,如果只是浅浅一用那就有点暴殄天物了。
不过虽然AWR里面包含了十分有价值的可观测性数据,但是阅读起来确实太难了,也太消耗精力了。以前你在分析一些疑难杂症的时候,我经常反反复复阅读一份AWR报告,一份报告甚至可以看上一两天,在一些细微的数据中去查找问题的蛛丝马迹。在很多情况下,我甚至需要通过多份故障期间和正常期间的AWR报告的对比,才能逐步找到那个细微的差异,从而找到定位问题的关键。
进入AI时代,这一切得到了改善,利用AI去阅读报告,摘要报告,找出问题是一种比较便捷的方法。有些时候我为了偷懒,也会把一些关键的AWR数据粘贴给AI,让它帮我分析,然后我在它的输出的基础上去做确认,效率就高了很多。不过有一点要注意,AI会胡说八道,因此拥有分辨问题的强大能力是能把AI用好的关键。因为利用Awr去分析定位问题的知识AI掌握得不是很全面,深层次的经验也不全面,所以虽然有时候AI的分析结果很惊艳,但是有时候也会瞎说一气。
今天写这篇文章的时候,我在想,是不是我可以写一个AI AGENT,把我以前阅读AWR的经验输入给AI,利用AI去学习我的经验来阅读AWR报告,我想这个想法是可行的,有空的时候我可以试着做一下。
现在很多国产数据库也都有AWR报告,不过说句不好听的,绝大多数都是样子货,什么时候国产数据库原厂工程师在分析问题的时候,首先会使用自己的AWR,并且只利用AWR就能大致定位问题了,那就说明国产数据库的AWR凑合可以用了,可惜现在这个阶段也还没有达到。以我个人的感觉,目前国产数据库的AWR的水平,也就是当年Oracle 8.0的水平,国产数据库AWR的技术水平提升的余地还很大。我也希望国产数据库的AWR报告能够在未来也成为DBA不可或缺的工具。




