AWR 报告的“Load profile”节,如下图所示,包含很多极为有用,却被经常忽视的信息。通常更倾向使用“instance efficiency percentages”节,虽然可读性好,但很容易产生误解

 

Per Second

Per Transaction

Per Exec

Per Call

DB Time(s):

0.1

0.2

0.01

0.08

DB CPU(s):

0.0

0.1

0.01

0.05

Redo size:

2,650.2

9,391.1

   

Logical reads:

863.7

3,060.4

   

Block changes:

31.6

112.1

   

Physical reads:

220.2

780.2

   

Physical writes:

0.7

2.3

   

User calls:

0.9

3.1

   

Parses:

2.4

8.4

   

Hard parses:

0.2

0.8

   

W/A MB processed:

356,098.6

1,261,849.5

   

Logons:

0.0

0.2

   

Executes:

5.3

18.9

   

Rollbacks:

0.0

0.0

   

Transactions:

0.3

     

Redo size


你在数据库所做的一切都被redo(重做)保护。重做是所谓“change vectors(变化向量)”的集合,告诉 Oracle 如何在数据上重复操作,如果需要的话。尽管 SELECT 也可以产生一些 redo,但是 redo 的主要来源(在大约降序排序):INSERT,UPDATE 和 DELETE。对 INSERT 和 UPDATE,redo 大小接近创建或修改数据的数量。对与 DELETE,你只需要知道已删除行的rowid,以便重复操作,因此,如果数据行是“fat”,那么redo大小可能远小于已删除数据的大小。

高redo数值意味着,大量新的数据被保存到数据库中,或现有的数据发生很多的变化,即DML操作很频繁。

多高算高?数据库不一样,所以不存在通用的标准。不过,我发现每秒 redo 乘以 86,400 秒(24*60*60=86,400,一天的秒数)会很有用,并且把它与数据库的大小相比——如果数字是在同一量级(magnitude),那么这就让我很奇怪了。数据库的大小每隔几天增加一倍?或者几乎每天修改每一行吗?也许,有些正在发生的我不知道的事情?

如果发现 redo 代过高你会怎么做。留意任何可疑的DML活动。此外,务必看下“segments statistics”小结(physical writes 段、DB block changes 段等),看是否有任何线索。

Logical reads, block changes, physical reads/writes


简单来说,Logical reads 是数据库读取数据块的数量,包括 physical(例如,磁盘)reads,block changes 是自我描述。这些统计告诉我们报告时数据库活动的性质(多数在写,多数在读,读写都有一点)和规模。它也给出一个想法,缓存的数据如何在数据库更好地工作(但你也在“instance efficiencies”小节从buffer cache hit ratio直接看到)。

如果你发现该数值比预期(基于平时的数值,当前应用程序负载等)的高,那么你可以下钻到“SQL by logical reads” 和“SQL by physical reads”,看下是什么SQL语句造成的。

User calls


当一个数据库客户端要求服务器做某些事时,像logon、parse、execute、fetch 等,就叫 user call。这是相当有用的信息,因为它为其他统计设置了规模(如 commits、hard parses 等)。

特别是,当数据库正在执行很多次时,每个user call,这可能是一个迹象,过多的上下文切换(例如,由于不好的执行计划,SQL语句中的PL / SQL函数在过于频繁地被调用,因为一个糟糕的计划)。在这种情况下,看下“SQL ordered by executions”将是合乎逻辑的下一步。

Parses and hard parses


Parse是分析查询的文本(可选),优化执行计划。如果涉及优化执行计划,那么它是一个hard parse,否则soft parse。

正如我们都知道,Parse是昂贵的(性能明智)。过多Parse会导致非常讨厌的性能问题(一个时刻,你的数据库似乎很好,下一刻,就变成完全停顿)。过度Parse的另一个坏事是,它使故障排除性能较差的SQL 更 困难

多糟的hard parse是可以接受的?这取决于很多东西,像CPU数量,执行次数,执行计划对SQL参数有多敏感等等,但是,一个经验法则,低于每秒1个hard parse可能是好的,每秒100个以上就有问题了(如果数据库中有很多CPU,比如100个以上,这些数字会相应地扩大)。它还有助于看数量的硬盘解析%执行(the number of hard parses as % of executions)(特别是如果你在灰色地带)。

如果你怀疑过度Parse正在损害你数据库的性能:

1) 检查“time model statistics”小节(hard parse elapsed time、parse time elapsed 等等)

2) 看是否在在top-5 events有library cache 竞争的迹象

3) 看是否CPU有问题

如果证实你的怀疑,那么找到过度Parse源(对soft parse,使用“SQL by parse calls”;对hard parse,使用force_matching_signature),看是否可以修复它。

Sorts


排序操作消耗资源。此外,高昂的排序由于运行超出 TEMP 空间可能导致SQL失败。所以,很显然,排序越少越好(当你需要时,应该在内存中排序)。不过,我个人很少发现排序统计特别有用:通常情况下,如果高昂的排序正在损害你的SQL性能,那么你会首先发现它。

Logons

建立一个新的数据库连接是高昂的(在audit 或 trigger 情况下更高昂)。“Logon storms”被认为会产生非常严重的 性能问题。如果你怀疑 logons 高数量正在降低性能,那么检查“Time model statistics”中“connection management elapsed time”。

Executes


Executes 对分析性能很重要,但是我在上面“user calls”和“parses and hard parses”中已经说明。

Transactions


在一般(比如,创建理解报告其余部分的上下文)和特定(排除有关事务控制的性能问题)层次上,这是另一个非常重要的统计数据。AWR 报告提供了有关事务和回滚的信息,比如,计算两者之间提交数量的差异。回滚是昂贵的操作,并且,如果使用不当(即在测试的时候,测试后将数据库恢复到原来的状态),可能会导致性能问题,它可以通过控制数量减少回滚或调整回滚段。回滚也可以表明的一个分支代码失败,从而被迫回滚的结果(如果结果错误没有被适当处理或重新抛出的话,这可以被监控)。

过多的提交可以导致性能问题,通过 log file sync waits

多少算过多?这完全依赖于数据库。显然,OLTP 数据库的提交要超过 DWH,并且在 OLTP 数据库之间,数量可以改变几个数量级。对于我曾参与的数据库,每秒低于 10-20,不会有任何问题,超过 100-200 就会有问题了(当不确定时,看下“top timed events”节:如果没有“log file sync“等待,那么可能就没关系!)。

参考


AWR - Load Profile 节的更多相关文章

  1. AWR報告詳解

    AWR是Oracle  10g 版本 推出的新特性, 全称叫Automatic Workload Repository-自动负载信息库, AWR 是通过对比两次快照(snapshot)收集到的统计信息 ...

  2. 理论实践:循序渐进理解AWR细致入微分析性能报告

    1. AWR 概述 Automatic Workload Repository(AWR) 是10g引入的一个重要组件.在里面存贮着近期一段时间内(默认是7天)数据库活动状态的详细信息. AWR 报告是 ...

  3. 快速熟悉 Oracle AWR 报告解读

    目录 AWR报告简介 AWR报告结构 基本信息 Report Summary Main Report RAC statistics Wait Event Statistics 参考资料 本文面向没有太 ...

  4. Oracle的AWR报告分析

    * 定义:awr报告是oracle 10g下提供的一种性能收集和分析工具,它能提供一个时间段内整个系统资源使用情况的报告,通过这个报告,我们就可以了解一个系统的整个运行情况,这就像一个人全面的体检报告 ...

  5. AWR报告-数据库概要信息(一)

    Elapse time为两个Snap时间间隔,相当于取样时间差 DB Time : db time= cpu time + wait time(不包含空闲等待)(非后台进程)  说白了就是db tim ...

  6. oracle AWR深入研究分析,如何使用

    AWR的前身是statspack,当然现在还在,只不过大家都在使用AWR,因为它方便,简单,直观,形象. AWR是oracle内置工具,安装oracle时已经自动安装完毕,无需额外安装了. SELEC ...

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

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

  8. maclean-【性能调优】Oracle AWR报告指标全解析 学习笔记

    原文链接:http://www.askmaclean.com/archives/performance-tuning-oracle-awr.html AWR小技巧 手动执行一个快照: Exec dbm ...

  9. Oracle AWR 报告详解

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

随机推荐

  1. 初识GRUNT

    什么是GRUNT? 基于任务的命令行工具.能做的事包括: ● 验证html,css, javascript● 压缩css, javascript● 编译CoffeeScript, TypeScript ...

  2. msgpack的数据序列和还原

    msgpack的数据序列和还原 msgpack不仅可以序列一些常规的数据类型的数据,比如:string.datetime.integer...... 还能序列olevariant.stream 这就非 ...

  3. 【推荐】腾讯android镜像(做Android开发的得好好利用下这个网站,国内的大公司还是可以滴……)

    原文地址:http://android-mirror.bugly.qq.com:8080/include/usage.html ☀ Windows I. Open Android SDK Manage ...

  4. MyBatis-Generator最佳实践

    引用地址:http://arccode.net/2015/02/07/MyBatis-Generator%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5/ 最近使用MyBati ...

  5. Struts2 注解模式

    相信大家一定看到了两个class中定义了一样的action,不过看类的元数据,是不同的命名空间.这里比较重要(对我来说)的是 @Action(value = "/login", r ...

  6. script标签加载顺序(defer & async)

    script 拥有的属性 async:可选,表示应该立即下载脚本,但不应妨碍页面中的其他操作,比如下载其他资源或等待加载其他脚本.只对外部脚本文件有效. charset:可选.表示通过 src 属性指 ...

  7. Adapter数据变化改变现有View的实现原理及案例

    首先说说Adapter详细的类的继承关系.例如以下图 Adapte为接口它的实现类的对象作为AdapterView和View的桥梁,Adapter是装载了View(比方ListView和girdVie ...

  8. mongodb 脚本操作

    MO='mongo'$MO << EOFuse testdbdb.dropDatabase()show dbsexit;EOF

  9. 使用强大的 Mockito 测试框架来测试你的代码

    原文链接 : Unit tests with Mockito - Tutorial 译文出自 : 掘金翻译计划 译者 : edvardhua 校对者: hackerkevin, futureshine ...

  10. [转]MySQL单列索引和组合索引的区别介绍

    FROM : http://database.ctocio.com.cn/353/11664853.shtml MySQL单列索引是我们使用MySQL数据库中经常会见到的,MySQL单列索引和组合索引 ...