如何使用AWR报告来诊断数据库性能问题 (Doc ID 1523048.1)

0    389    2

Tags:

👉 本文共约208940个字,系统预计阅读时间或需786分钟。

目录

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

    原文:https://cloud.tencent.com/developer/article/1052351

    本篇文章重点对 AWR 报告中的 DB Time、DBCPU、IO 等数据进行了说明,可帮助读者更加清楚的理解这些数据代表的含义,与数据库的性能表现有何关系。同时通过两个简短的例子,实践如何分析 AWR 报告。

    \1. AWR 概述

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

    AWR 报告是对 AWR 视图进行查询而得到的一份自动生成的报告。可以通过下面的脚本手工得到一份 AWR 报告。

    如何使用AWR报告来诊断数据库性能问题 (Doc ID 1523048.1)

    通过 AWR 和 AWR 报告,DBA 可以容易地获知最近数据库的活动状态,数据库的各种性能指标的变化趋势曲线,最近数据库可能存在的异常,分析数据库可能存在的性能瓶颈从而对数据库进行优化。

    AWR 报告所有的数据来源于 AWR 视图,即以 DBA_HIST_开头的所有系统表,Database Reference 有对所有这些系统表的描述,这应该是 Oracle 官方对 AWR 报告的官方注释了。而对于如何有效地去分析 AWR 报告,这可能更需要 DBA 经验的日积月累。

    AWR的前身是Statspack,Statspack在10g和11g中也有提供,同时和AWR一起做了同步更新,而且Statspack是公开源代码的,因此,关于Statspack的资料,还有Statspack的源代码,都是理解AWR的一个有用的辅助。

    本文着重对AWR中的一些要点进行剖析,欢迎一起讨论AWR相关的问题。

    \2. DB CPU - CPU负载分析

    如果关注数据库的性能,那么当拿到一份 AWR 报告的时候,最想知道的第一件事情可能就是系统资源的利用情况了,而首当其冲的,就是 CPU。

    而细分起来,CPU 可能指的是:

    OS 级的 User%,Sys%, Idle%

    DB 所占 OS CPU 资源的 Busy%

    DBCPU 又可以分为前台所消耗的 CPU 和后台所消耗的 CPU

    如果数据库的版本是11g,那么很幸运的,这些信息在AWR报告中一目了然:

    如何使用AWR报告来诊断数据库性能问题 (Doc ID 1523048.1)

    如何使用AWR报告来诊断数据库性能问题 (Doc ID 1523048.1)

    分析上面的图片,我们可以得出下面的结论:

    OS 级的 User%,Sys%,Idle%:

    OS 级的 %User 为75.4,%Sys 为2.8,%Idle 为21.2,所以 %Busy 应该是 100-21.1=78.8。

    DB所占OSCPU资源的Busy%

    DB占了OS CPU资源的69.1,%Busy CPU则可以通过上面的数据得到:

    %Busy CPU = %Total CPU/(%Busy) 100 = 69.1/78.8 100 = 87.69,和报告的87.7相吻合。

    如果是10g呢,则需要手工对 Report 里的一些数据进行计算了。

    Host CPU 的结果来源于 DBA_HIST_OSSTAT,AWR 报告里已经帮忙整出了这段时间内的绝对数据(这里的时间单位是centi second,也就是1/100秒)

    如何使用AWR报告来诊断数据库性能问题 (Doc ID 1523048.1)

    根据上面的数据,稍加计算分析便可得出下面的结果。

    OS级的User%,Sys%,Idle%:

    %User = USER_TIME/ (BUSY_TIME+IDLE_TIME)100 =146355/ (152946+41230)100 = 75.37

    %Sys = SYS_TIME/ (BUSY_TIME+IDLE_TIME)100=5462/(152946+41230)100=2.81

    %Idle = IDLE_TIME/ (BUSY_TIME+IDLE_TIME)100=21230/(152946+41230)100=10.93

    值得注意的,这里已经隐含着这个AWR报告所捕捉的两个Snapshot之间的时间长短了。有下面的公式:

    BUSY_TIME + IDLE_TIME = ELAPSED_TIME * CPU_COUNT

    注意:正确的理解这个公式可以对系统CPU资源的使用及其度量的方式有更深一步的理解。

    因此ELAPSED_TIME =(152946+41230)/8/100 = 242.72 seconds

    至于DB对CPU的利用情况,这就涉及到10g新引入的一个关于时间统计的视图V$SYS_TIME_MODEL,简单而言,Oracle采用了一个统一的时间模型对一些重要的时间指标进行了记录,具体而言,这些指标包括:

    \1) Background elapsed time

    \2) Background CPU time

    本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!
    如何使用AWR报告来诊断数据库性能问题 (Doc ID 1523048.1)后续精彩内容已被小麦苗无情隐藏,请输入验证码解锁本站所有文章!
    验证码:
    请先关注本站微信公众号,然后回复“验证码”,获取验证码。在微信里搜索“DB宝”或者“www_xmmup_com”或者微信扫描右侧二维码都可以关注本站微信公众号。

    标签:

    Avatar photo

    小麦苗

    学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

    您可能还喜欢...

    发表回复

    嘿,我是小麦,需要帮助随时找我哦。
    • 18509239930
    • 个人微信

    • DB宝
    • 个人邮箱
    • 点击加入QQ群
    • 个人微店

    • 回到顶部