当前位置:  数据库>oracle

如何使用AWR报告来诊断数据库性能问题

    来源: 互联网  发布时间:2017-06-10

    本文导语: 如何主动避免问题发生及做好诊断信息的收集 有些问题是无法预见的,但大部分其它的问题如果及早发现一些征兆其实是可以避免的。同时,如果问题确实发生了,那么收集问题发生时的信息就非常重要。有关于如何主动避免...

如何主动避免问题发生及做好诊断信息的收集

有些问题是无法预见的,但大部分其它的问题如果及早发现一些征兆其实是可以避免的。同时,如果问题确实发生了,那么收集问题发生时的信息就非常重要。有关于如何主动避免问题及诊断信息的收集.
对于数据库整体的性能问题,AWR的报告是一个非常有用的诊断工具。
 一般来说,当检测到性能问题时,我们会收集覆盖了发生问题的时间段的AWR报告-但是最好只收集覆盖1个小时时间段的AWR报告-如果时间过长,那么AWR报告就不能很好的反映出问题所在。还应该收集一份没有性能问题的时间段的AWR报告,作为一个参照物来对比有问题的时间段的AWR报告。这两个AWR报告的时间段应该是一致的,比如都是半个小时的,或者都是一个小时的。 

Oracle AWR报告生成与查看

在CentOS 6.4下安装Oracle 11gR2(x64)

Oracle 11gR2 在VMWare虚拟机中安装步骤

Debian 下 安装 Oracle 11g XE R2

Oracle AWR报告生成步骤


 
Interpretation

在处理性能问题时,我们最关注的是数据库正在等待什么。
 当进程因为某些原因不能进行操作时,它需要等待。花费时间最多的等待事件是我们最需要关注的,因为降低它,我们能够获得最大的好处。
AWR报告中的"Top 5 Timed Events"部分就提供了这样的信息,可以让我们只关注主要的问题。
• 
Top 5 Timed Events
正如前面提到的,"Top 5 Timed Events"是AWR报告中最重要的部分。它指出了数据库的sessions花费时间最多的等待事件,如下:

Top 5 Timed Events                                        Avg %Total

~~~~~~~~~~~~~~~~~~                                        wait  Call

Event                                Waits    Time (s)  (ms)  Time Wait Class

------------------------------ ------------ ----------- ------ ------ ----------

db file scattered read          10,152,564      81,327      8  29.6  User I/O

db file sequential read          10,327,231      75,878      7  27.6  User I/O

CPU time                                        56,207          20.5

read by other session            4,397,330      33,455      8  12.2  User I/O

PX Deq Credit: send blkd            31,398      26,576    846    9.7      Other

        -------------------------------------------------------------


Top 5 Events部分包含了一些跟Events(事件)相关的信息。它记录了这期间遇到的等待的总次数,等待所花费的总时间,每次等待的平均时间;这一部分是按照每个Event占总体call time的百分比来进行排序的。

 根 据Top 5 Events部分的信息的不同,接下来我们需要检查AWR报告的其他部分,来验证发现的问题或者做定量分析。等待事件需要根据报告期的持续时间和当时数据 库中的并发用户数进行评估。如:10分钟内1000万次的等待事件比10个小时内的1000万等待更有问题;10个用户引起的1000万次的等待事件比 10,000个用户引起的相同的等待要更有问题。

 就像上面的例子,将近60%的时间是在等待IO相关的事件。

• 事件"db file scattered read"一般表明正在做由全表扫描或者index fast full scan引起的多块读。
• 事件"db file sequential read"一般是由不能做多块读的操作引起的单块读(如读索引)

 其他20%的时间是花在使用或等待CPU time上。过高的CPU使用经常是性能不佳的SQL引起的(或者这些SQL有可能用更少的资源完成同样的操作);对于这样的SQL,过多的IO操作也是一个症状。关于CPU使用方面,我们会在之后讨论。

 在以上基础上,我们将调查是否这个等待事件是有问题的。若有问题,解决它;若是正常的,检查下个等待事件。

 过多的IO相关的等待一般会有两个主要的原因:

• 数据库做了太多的读操作
• 每次的IO读操作都很慢
Top 5 Events部分的显示的信息会帮助我们检查:

• 是否数据库做了大量的读操作:
 上面的图显示了在这段时间里两类读操作都分别大于1000万,这些操作是否过多取决于报告的时间是1小时或1分钟。我们可以检查AWR报告的elapsed time如果这些读操作确实是太多了,接下来我们需要检查AWR报告中 SQL Statistics 部分的信息,因为读操作都是由SQL语句发起的。
• 是否是每次的IO读操作都很慢:
 上面的图显示了在这段时间里两类读操作平均的等待时间是小于8ms的
 至于8ms是快还是慢取决于底层的硬件设备;一般来讲小于20ms的都可以认为是可以接受的。

 我们还可以在AWR报告"Tablespace IO Stats"部分得到更详细的信息

Tablespace IO Stats                      DB/Inst: VMWREP/VMWREP  Snaps: 1-15

-> ordered by IOs (Reads + Writes) desc

 

Tablespace

------------------------------

                Av      Av    Av                      Av    Buffer Av Buf

        Reads Reads/s Rd(ms) Blks/Rd      Writes Writes/s      Waits Wt(ms)

-------------- ------- ------ ------- ------------ -------- ---------- ------

TS_TX_DATA

  14,246,367    283    7.6    4.6  145,263,880    2,883  3,844,161    8.3

USER

      204,834      4  10.7    1.0  17,849,021      354    15,249    9.8

UNDOTS1

      19,725      0    3.0    1.0  10,064,086      200      1,964    4.9

AE_TS

    4,287,567      85    5.4    6.7          932        0    465,793    3.7

TEMP

    2,022,883      40    0.0    5.8      878,049      17          0    0.0

UNDOTS3

    1,310,493      26    4.6    1.0      941,675      19        43    0.0

TS_TX_IDX

    1,884,478      37    7.3    1.0      23,695        0    73,703    8.3

>SYSAUX

      346,094      7    5.6    3.9      112,744        2          0    0.0

SYSTEM

    101,771      2    7.9    3.5      25,098        0        653    2.7

如上图,我们关心Av Rd(ms)的指标。如果它高于20ms并且同时有很多读操作的,我们可能要开始从OS的角度调查是否有潜在的IO问题。

更多详情见请继续阅读下一页的精彩内容:


    
 
 

您可能感兴趣的文章:

  • 自动化收集SQLSERVER诊断信息的工具选择及使用介绍
  • 诊断SQLSERVER问题常用的日志概述及使用
  • linux系统下使用使用性能监视工具的前提?
  • 性能测试中应该用top命令统计cpu使用情况还是ps命令?
  • 请教各位:只安装TOMCAT而不搭配apache一起使用,在性能上有什么差别
  • ********************使用io复用好还是多线程的性能好?**************************
  • Mysql自带profiling性能分析工具使用分享
  • 强制SQL Server执行计划使用并行提升在复杂查询语句下的性能
  • oracle 使用递归的性能提示测试对比
  • 使用sqlbulkcopy提高导入数据的性能的方法
  • 【求助贴】数据库基准性能测试OSDL以及其工具的BDT系列的使用
  • mysql性能优化脚本mysqltuner.pl使用介绍
  • MySQL性能分析及explain的使用说明
  • 在Python中使用异步Socket编程性能测试
  • 在Nginx中使用X-Sendfile头提升PHP文件下载的性能(针对大文件下载)
  • 如何书写高质量jQuery代码(使用jquery性能问题)
  • MySQL索引背后的之使用策略及优化(高性能索引策略)
  • JAVA LinkedList和ArrayList的使用及性能分析
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • mysql数据库下载安装教程和使用技巧
  • 大家在UNIX下都使用什么数据库?使用什么做数据开发?
  • mongodb 数据库常用命令使用实例
  • 请问:在使用oracle数据库作开发时,是使用pro*c作开发好些,还是使用库函数如oci等好一些啊?或者它们有什么区别或者优缺点啊?
  • 请教在linux系统开发环境下,有没有db和dbf数据库引擎,如何使用这个数据库?
  • 使用php语句将数据库*.sql文件导入数据库
  • 使用JDBC连接数据库时Class.forName()语句的使用疑问
  • 如何使用jsp显示数据库中的数据?
  • 收缩后对数据库的使用有影响吗?
  • 当发布的程序中含有数据库的使用时,...?
  • 如何强制删除或恢复SQLServer正在使用的数据库
  • 一个数据库函数的使用?
  • 嵌入式linux下数据库使用
  • 请教数据库连接池的使用....
  • 在tomcat 中使用jdbcrealm是否一定要在数据库中建立用户表和 角色表
  • 超酷数据库工具发布(JAS), 欢迎使用
  • linux下使用易飞ERP系统出现“报表数据库连接错误!!”是怎么回事
  • linux下服务器开发一般使用什么数据库?
  • linux使用mysql删除数据库的问题,谢谢!
  • 请问如何在jsp中使用JDBC动态更新数据库?
  • 关于使用数据库连接的问题。
  • C++ I/O 成员 tellg():使用输入流读取流指针
  • 在测试memset函数的执行效率时,分为使用Cash和不使用Cash辆种方式,该如何控制是否使用缓存?
  • C++ I/O 成员 tellp():使用输出流读取流指针
  • 求ibm6000的中文使用手册 !从来没用过服务器,现在急需使用它,不知如何使用! 急!!!!!
  • Python不使用print而直接输出二进制字符串
  • 急求结果!!假设一个有两个元素的信号量集S,表示了一个磁带驱动器系统,其中进程1使用磁带机A,进程2同时使用磁带机A和B,进程3使用磁带机B。
  • Office 2010 Module模式下使用VBA Addressof
  • c#中SAPI使用总结——SpVoice的使用方法
  • windows下tinyxml.dll下载安装使用(c++解析XML库)
  • 使用了QWidget的程序,如何使用后台程序启动它?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,