全网最全的解读Oracle AWR报告合集,免费订阅中
。
下面是Oracle AWR report中的"SQL Statistics"部分的“SQL ordered by Elapsed Time” 列表:

从上表中可以看到,主要包含三类语句:
SELECT 查询 INSERT 插入 PL/SQL 块(BEGIN ...)
对于 SELECT 语句,%CPU
和 %IO
之和通常接近 100%,这说明它们的等待时间几乎全部由 CPU计算 和 I/O操作 构成,属于“健康”的SQL。
但对于 INSERT 语句, %CPU + %IO
之和明显低于 100%,意味着还有大量时间花在没有产出的等待上。
为了定量分析这部分“缺失的时间”,我们可以用以下公式计算:
Missing Portion = (100% - %CPU - %IO) × %Total
以下是几个INSERT语句的计算结果:
合计后,“缺失”的DB Time比例约为 20.74%。这部分时间,这是在SQL层面上无法用CPU和I/O解释的“空白时间”。
为了找出SQL在这段“空白时间”到底在干什么,我们看看AWR报告的 Top 10 Foreground Events by Total Wait Time 部分:

我们可以看到除了CPU和IO外的等待主要有三类:
都与 INSERT 操作 相关,而非 SELECT。具体来说:
log file switch (checkpoint incomplete) 和 log file sync是 由INSERT产生的redo日志写入引起; buffer busy waits是当多个INSERT同时往同一个数据块写入时,发生的块争用等待。
三者的总和为 19.9% + 3.3% + 1.4% = 24.6%,与我们在SQL层面计算出的 20.74% 缺口很接近。
启示:如果在AWR报告中发现某些SQL的 %CPU + %IO 远低于100%,那就意味着它在进行无效等待,这时可以试图从“Top Events”中找找是谁偷走了那段时间。
推荐文章👇
从我的经历看IT工程师能干到退休吗?号主在certview.oracle.com网站上的证书清单截图:

欢迎关注我的公众号,一起学习数据库技术,分享职业发展的思考。
欢迎加我的微信,拉你进微信群





