本文面向没有太多 Oracle 基础知识,但是需要通过 AWR 报告来分析数据库性能或排查问题人员,通过对 AWR 报告的简介,了解其包含的主要信息,然后对一些能够帮助我们分析定位问题的章节做一点稍微详细的介绍。通过阅读本文,期望使读者能够快速抓住阅读 AWR 报告的重点,为分析判断数据库性能是否有问题提供帮助。

本文示例报告基于 Oracle 11.2.0.3.0 版本生成。

AWR报告简介

AWR是Oracle 10g版本推出的特性,全称叫做 Automatic Workload Repository 全自动负载信息库 。Oracle启动后,会有后台进程定时采集并保存系统快照信息,也可以手工创建快照。AWR通过对比两个时间点的快照信息,生成该时间段的AWR报告,帮助DBA或开发人员了解 Oracle 数据库的运行情况。Oracle 还提供了 ASH、ADDM等工具,本文不进行探讨。

AWR报告结构

AWR报告基本分为四部分:

  • 基本信息部分,包括了DB实例、主机的信息以及报告采集时间段的信息。
  • Main Report部分,第一部分Report Summary被单独放在了基本信息后面,其他的信息则放在整个报告较后的位置,个人觉得最重要的部分是SQL Statistcs。
  • RAC statistics部分,包括RAC相关的统计信息。
  • Wait Event Statistics部分。

基本信息

报告一开始部分为基本信息,显示了DB实例、主机信息。DB Time 指标可以用来判断数据库是否繁忙,如果 Elapsed 时间乘以CPU个数小于DB Time 表示数据库比较繁忙。

Report Summary

Report Summary 分为8个部分,最主要的是 Load Profile。

Load Profile 主要用来显示当前系统的一些指示性能的总体参数,部分介绍如下:

  • Redo Size :用来显示平均每秒的日志大小和平均每个事务的日志大小,有时候可以结合 Transactions 每秒事务数,分析当前事务的繁忙程度
  • Logical Read:逻辑读耗CPU,主频和CPU核数都很重要,逻辑读高则DB CPU往往高,也往往可以看到 latch: cache buffer chains 等待。
  • Physical Read:物理读消耗IO读,体现在IOPS和吞吐量等不同纬度上。但减少物理读可能意味着消耗更多CPU。
  • Parses:解析次数,包括软解析 + 硬解析,软解析优化得不好几乎等于每秒SQL执行次数, 即执行解析比1:1。理想状态是解析一次到处运行。
  • Hard Parses:硬解析次数,最好少于没秒20次。

注意 Load Profile 中的指标提供了 Per second 和 Per transaction 两个维度。Per second 主要是把快照抓到的值除以两个快照之间的秒数。这是我们用来判断性能的主要维度。Per transaction 是基于事务的维度,主要是把快照抓到的值除以两个快照之间的事务数。

Instance Efficiency Percentages 是一些命中率指标。Buffer Hit、Library Hit 等表示SGA ( System global area )的命中率。Soft Parse 指标表示共享池的软解析率,如果小于90%,就说明存在未绑定变量的情况。这些指标应当尽可能接近100%,如果过低一定是发生了性能问题。

  • Buffer Nowait ** 表示在内存获得数据的未等待比例。在缓冲区中获取Buffer的未等待比率。Buffer Nowait的这个值一般需要大于99%**。否则可能存在争用,可以在后面的等待事件中进一步确认。
  • Buffer Hit 表示进程从内存中找到数据块的比率,监视这个值是否发生重大变化比这个值本身更重要。对于一般的OLTP系统,如果此值低于80%,应该给数据库分配更多的内存。数据块在数据缓冲区中的命中率,通常应在95%以上。
  • Redo NoWait 表示在Log 缓冲区获得Buffer的未等待比例。如果太低可考虑增加Log Buffer。当redo buffer达到1M时就需要写到redo log文件,所以一般当redo buffer设置超过1M,不太可能存在等待buffer空间分配的情况。当前,一般设置为2M的redo buffer,对于内存总量来说,应该不是一个太大的值。
  • Library Hit 表示Oracle从Library Cache中检索到一个解析过的SQL或PL/SQL语句的比率,当应用程序调用SQL或存储过程时,Oracle检查Library Cache确定是否存在解析过的版本,如果存在Oracle立即执行语句;如果不存在Oracle解析此语句,并在Library Cache中为它分配共享SQL区。低的Library Hit Ratio会导致过多的解析,增加CPU消耗,降低性能。如果Library Hit Ratio低于90%,可能需要调大Shared pool区。
  • Latch Hit:Latch是一种保护内存结构的锁,可以认为是Server进程获取访问内存数据结构的许可。要确保Latch Hit>99%,否则意味着Shared Pool latch争用,可能由于未共享的SQL,或者Library Cache太小,可使用绑定变更或调大Shared Pool解决。要确保>99%,否则存在严重的性能问题。当该值出现问题的时候,我们可以借助后面的等待时间和latch分析来查找解决问题。
  • Parse CPU to Parse Elapsd:解析实际运行时间/(解析实际运行时间+解析中等待资源时间),越高越好。如果该比率为100%,意味着CPU等待时间为0,没有任何等待。
  • Non-Parse CPU :SQL实际运行时间/(SQL实际运行时间+SQL解析时间),太低表示解析消耗时间过多。如果这个值比较小,表示解析消耗的CPU时间过多。
  • Execute to Parse:是语句执行与分析的比例,如果要SQL重用率高,则这个比例会很高。该值越高表示一次解析后被重复执行的次数越多。
  • In-memory Sort:在内存中排序的比率,如果过低说明有大量的排序在临时表空间中进行。考虑调大PGA(10g)。如果低于95%,可以通过适当调大初始化参数PGA_AGGREGATE_TARGET或者SORT_AREA_SIZE来解决,注意这两个参数设置作用的范围时不同的,SORT_AREA_SIZE是针对每个session设置的,PGA_AGGREGATE_TARGET则时针对所有的sesion的。
  • Soft Parse:软解析的百分比(Softs/Softs+Hards),近似当作sql在共享区的命中率,太低则需要调整应用使用绑定变量。sql在共享区的命中率,小于<95%,需要考虑绑定,如果低于80%,那么就可以认为sql基本没有被重用。

Main Report

  • Report Summary 在上面一节已经说过,不再赘述。
  • SQL Statistics 从 11 个维度对SQL进行排序并给出了Top SQL的详细内容,可以点击查看具体的SQL内容,进一步分析调优方案。
    • SQL ordered by Elapsed Time。记录了执行总和时间的 TOP SQL(请注意是监控范围内该SQL的执行时间总和,而不是单次SQL执行时间 Elapsed Time = CPU Time + Wait Time)。
    • SQL ordered by CPU Time。记录了执行占CPU时间总和时间最长的TOP SQL(请注意是监控范围内该SQL的执行占CPU时间总和,而不是单次SQL执行时间)。
    • SQL ordered by Gets。记录了执行占总 buffer gets (逻辑IO)的TOP SQL(请注意是监控范围内该SQL的执行占Gets总和,而不是单次SQL执行所占的Gets)。
    • SQL ordered by Reads。记录了执行占总磁盘物理读(物理IO)的TOP SQL。
    • SQL ordered by Executions。记录了按照SQL的执行次数排序的TOP SQL。该排序可以看出监控范围内的SQL执行次数。
    • SQL ordered by Parse Calls。记录了SQL的软解析次数的TOP SQL。
    • SQL ordered by Sharable Memory。记录了SQL占用library cache的大小的TOP SQL。Sharable Mem (b):占用library cache的大小,单位是byte。
    • SQL ordered by Version Count。记录了SQL的打开子游标的TOP SQL。
    • SQL ordered by Cluster Wait Time。记录了集群的等待时间的TOP SQL。
  • Top 10 Foreground Events by Total Wait Time,等待事件是衡量数据库优化情况的重要指标,通过观察Event和%DB time两列就可以直观看出当前数据库的主要等待事件。

RAC statistics

这一部分涉及RAC运行的相关统计信息,对于初学者来说不太常用,本文暂不赘述。

Wait Event Statistics

其中 Time Model Statistics 几个有用的指标解释如下:

  • parse time elapsed 与 hard parse elapsed time 需要结合起来看解析是否是主要矛盾,若是则重点是软解析还是硬解析。
  • sequence load elapsed time 序列争用
  • PL/SQL compilation elapsed time PL/SQL对象编译的耗时
  • connection management call elapsed time 数据库连接建立和断开的耗时
  • failed parse elapsed time 解析失败的耗时

参考资料

  1. oracle11G AWR使用及分析
  2. 等待事件:db file scattered read(离散读)
  3. 【深度长文】循序渐进解读Oracle AWR性能分析报告
  4. Oracle AWR报告生成和性能分析
  5. Oracle AWR报告指标全解析

快速熟悉 Oracle AWR 报告解读的更多相关文章

  1. Oracle AWR报告指标全解析-11011552

    1-5 Top 5 Timed EventsWaits : 该等待事件发生的次数, 对于DB CPU此项不可用Times : 该等待事件消耗的总计时间,单位为秒, 对于DB CPU 而言是前台进程所消 ...

  2. Oracle AWR 报告详解

    转自:http://blog.csdn.net/laoshangxyc/article/details/8615187 持续更新中... Oracle awr报告详解 DB Name DB Id In ...

  3. (原创)如何在性能测试中自动生成并获取Oracle AWR报告

    版权声明:本文为原创文章,转载请先联系并标明出处 由于日常使用最多的数据库为Oracle,因此,最近又打起了Oracle的AWR报告的主意. 过去我们执行测试,都是执行开始和结束分别手动建立一个快照, ...

  4. ORACLE AWR报告生成步骤

    ORACLE AWR报告生成步骤 (以PL/SQL中命令窗口为例) 1.sqlplus或plsql的commod窗口(命令窗口)运行命令 @D:\oracle\product\10.2.0\db_1\ ...

  5. Oracle Awr报告_awr报告解读_基础简要信息

    导出 关于awr报告的导出,上一篇博客已经进行过讲述了.博客链接地址:https://www.cnblogs.com/liyasong/p/oracle_report1.html  这里就不再赘述. ...

  6. ORACLE AWR报告生成过程出现多个实例记录分析

    在一次生成AWR报告中,发现在"Instances in this Workload Repository schema"部分,出现了多个实例记录信息(host敏感信息被用host ...

  7. Oracle AWR报告提取方法

    本文旨在用来指导项目人员自行提取Oracle数据库的AWR报告. 1.当前连接实例的AWR报告提取:@?/rdbms/admin/awrrpt 2.RAC的其他实例AWR报告提取:@?/rdbms/a ...

  8. ORACLE AWR报告数据的导入导出实践

    关于AWR的快照数据可以导出.导入,一直没有亲手实践过.今天动手测试了一下如何导出.导入AWR数据,将AWR的数据从一测试服务器,导入到另外一台测试服务器. SQL> @?/rdbms/admi ...

  9. 转: Oracle AWR 报告 每天自动生成并发送邮箱

    原贴地址:http://www.cnblogs.com/vigarbuaa/archive/2012/09/05/2671794.html Oracle AWR 介绍http://blog.csdn. ...

随机推荐

  1. SE第一次作业

    作业一.对软件工程的初步认识 下面是我对于软件工程的认识,结合自己的理解和课上听讲的内容 软件工程=软件+工程?软件工程是否就是简单的软件+工程呢?那么我们先来看下各自的概念. 那么什么叫软件呢,既然 ...

  2. 【计算几何 05】Pick定理

    什么是Pick定理(皮克定理) 来自wiki的介绍: 给定顶点座标均是整点(或正方形格子点)的简单多边形,皮克定理说明了其面积 \(A\)和内部格点数目 \(i\) .边上格点数目 \(b\) 的关系 ...

  3. 第六章 类(Class) 和对象(Object)

    一.笔记导图 二.实例代码: public class PrintCarStatus{ public static void main(String[] args){ int speed; Strin ...

  4. java中true不是关键字?

    java中true ,false , null在java中不是关键字,也不是保留字,它们只是显式常量值,但是你在程序中不能使用它们作为标识符. 其中const和goto是java的保留字.java中所 ...

  5. C#8.0之后接口已经不再单纯了,我懵逼了!

    一:背景 1. 讲故事 大家在经过面向对象洗礼的时候,都了解过接口,而且知道它是一种自上而下的设计思路,举个例子,我们电脑上都有 USB 2.0 接口,蓝牙耳机实现了它可以进行充电,移动硬盘实现了它可 ...

  6. 【bug录】安装项目编译环境bug录

    安装mySQL是遇到一些问题: 刚开始按照教程配置int文件,看着图标没有显示正确,把隐藏文件夹后缀名去掉, mysql由两种版本,zip和msi格式,我用的是zip格式,mysql后进行解压,记住解 ...

  7. VueX(简)

    最近又看了vue的文档,借此整理一下知识.用于自我加深理解 vueX是vue官方推出的状态管理机制. 上面一张图是核心 主要为: State:存储数据 Mutation: 更改数据 Action: 暴 ...

  8. 微信小程序picker组件两列关联使用方式

    在使用微信小程序picker组件时候,可以设置属性   mode = multiSelector   意为多列选择,关联选择,当第一列发生改变时侯,第二列甚至第三列发生相应的改变.但是官方文档上给的只 ...

  9. Redis学习笔记(四)——数据结构之List

    一.介绍 Redis列表(List)是简单的字符串列表,按照插入顺序排序.你可以添加一个元素到列表的头部(left)或者尾部(right),一个列表最多可以包含232-1个元素(4294967295, ...

  10. 如何計算n個圓的聯集面積

    如何計算n個圓的聯集面積 前言 一般人第一次遇到這個問題,可能會想要想辦法用排容原理,找圓之間交疊的凸包之類的.... 然而我只要舉一個例子,你就會發現我們就算把凸包找出來了,我們也非常難知道找到的凸 ...