博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【原】oracle11G AWR使用及分析
阅读量:7112 次
发布时间:2019-06-28

本文共 4836 字,大约阅读时间需要 16 分钟。

作者:david_zhang@sh 【转载时请以超链接形式标明文章】

链接:http://www.cnblogs.com/david-zhang-index/archive/2012/08/21/2649252.html 

1.先看一张图片,描述awr和ash的一些基础信息

 

 

1 SQL> conn /as sysdba 2   Connected. 3   SQL> @?/rdbms/admin/awrrpt.sql 4    5   Current Instance 6   ~~~~~~~~~~~~~~~~ 7    8   DB Id DB Name Inst Num Instance 9   ----------- ------------ -------- ------------10   3918594034 ORCL 1 orcl11   12   13   Specify the Report Type14   ~~~~~~~~~~~~~~~~~~~~~~~15   Would you like an HTML report, or a plain text report?16   Enter 'html' for an HTML report, or 'text' for plain text17   Defaults to 'html'18   Enter value for report_type: html19   20   Type Specified: html21   22   23   Instances in this Workload Repository schema24   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~25   26   DB Id Inst Num DB Name Instance Host27   ------------ -------- ------------ ------------ ------------28   * 3918594034 1 ORCL orcl DCMSBDM29   30   Using 3918594034 for database Id31   Using 1 for instance number32   33   34   Specify the number of days of snapshots to choose from35   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~36   Entering the number of days (n) will result in the most recent37   (n) days of snapshots being listed. Pressing 
without38 specifying a number lists all completed snapshots.39 40 41 Enter value for num_days: 242 43 Listing the last 2 days of Completed Snapshots44 45 Snap46 Instance DB Name Snap Id Snap Started Level47 ------------ ------------ --------- ------------------ -----48 kobra KOBRA 1227 20 Aug 2012 00:00 149 1228 20 Aug 2012 01:00 150 1229 20 Aug 2012 02:00 151 1230 20 Aug 2012 03:00 152 1231 20 Aug 2012 04:00 153 ...54 1263 21 Aug 2012 12:00 155 1264 21 Aug 2012 13:00 156 1265 21 Aug 2012 14:00 157 1266 21 Aug 2012 15:00 158 59 60 Specify the Begin and End Snapshot Ids61 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~62 Enter value for begin_snap: 122763 Begin Snapshot Id specified: 122764 65 Enter value for end_snap: 126566 End Snapshot Id specified: 126567 68 69 Specify the Report Name70 ~~~~~~~~~~~~~~~~~~~~~~~71 The default report file name is awrrpt_1_1227_1265.html. To use this name,72 press
to continue, otherwise enter an alternative.73 74 Enter value for report_name:75 76 Using the report name awrrpt_1_1227_1265.html77 78
AWR Report for DB: KOBRA, Inst: kobra, Snaps: 1227-126579 80 ...81 82 End of Report83 84 Report written to awrrpt_1_1227_1265.html85 86 SQL> exit

2.AWR报告分析

2.1CPU负载分析

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

1. OS级的User%,Sys%, Idle%

2. DB所占OS CPU资源的Busy%
3. DB CPU又可以分为前台所消耗的CPU和后台所消耗的CPU

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

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

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

OS级的%User为3.4,%Sys为0.4,%Idle为96.1,所以%Busy应该是100-96.1=3.9

DB所占OS CPU资源的Busy%:

DB占了OS CPU资源的3.7,%Busy CPU则可以通过上面的数据得到: %Busy CPU = %Total CPU/(%Busy) * 100 =3.7/3.9 * 100 = 94.87,应该和报告的95.3相吻合,这里有出入,我也不知道原因。

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

 

%User = USER_TIME/ (BUSY_TIME+IDLE_TIME)*100 = 1,850,185/ (2,147,757+52,550,299)*100 = 3.38

%Sys = SYS_TIME/ (BUSY_TIME+IDLE_TIME)*100=234,229/ (2,147,757+52,550,299)*100=0.4

%Idle = IDLE_TIME/ (BUSY_TIME+IDLE_TIME)*100=52,550,299/ (2,147,757+52,550,299)*100=96.1

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

BUSY_TIME + IDLE_TIME = ELAPSED_TIME * CPU_COUNT

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

因此ELAPSED_TIME = (2,147,757+52,550,299)/6/100 = 91163.42 seconds

Total DB CPU = DB CPU + Background CPU time = 20,108.16 + 357.62 = 20465.78 centi seconds

Total DB CPU除以总的 BUSY_TIME + IDLE_TIME可得出% Total CPU

% Total CPU = 20465.78/54698056 =3.7%,这刚好与上面Report的值相吻合。

其实,在Load Profile部分,我们也可以看出DB对系统CPU的资源利用情况。

用DB CPU per Second除以CPU Count就可以得到DB在前台所消耗的CPU%了。这里 0.2/6 = 3.3 %比3.7%稍小,说明DB在后台也消耗了大约0.4%的CPU,这是不是一个最简单的方法了呢?

3 DB Time – 进程消耗时间分析

DB CPU是一个用于衡量CPU的使用率的重要指标。假设系统有N个CPU,那么如果CPU全部处于繁忙状态的话,一秒钟内的DB CPU就是N秒。

如何去表征一个系统的繁忙程度呢?除了利用CPU进行计算外,数据库还会利用其它计算资源,如网络、硬盘、内存等等,这些对资源的利用同样可以利用时间进行度量。假设系统有M个Session在运行,同一时刻,有的Session可能在利用CPU,有的Session可能在访问硬盘,那么,在一秒钟内,所有Session的时间加起来就可以表征系统在这一秒内的繁忙程度,一般的,这个和的最大值应该为M。这其实就是Oracle提供的另一个重要指标:DB Time,它用以衡量前端进程所消耗的总时间。 对除CPU以外的计算资源的访问,Oracle用等待事件进行描述。同样地,和CPU可分为前台消耗CPU和后台消耗CPU一样,等待事件也可以分为前台等待事件和后台等待事件。 DB Time一般的应该等于DB CPU + 前台等待事件所消耗时间的总和。等待时间通过V$SYSTEM_EVENT视图进行统计,DB Time和DB CPU则是通过同一个视图,即V$SYS_TIME_MODEL进行统计。 Load Profile一节就有了对DB Time的描述:

这个系统的CPU个数是6,因此我们可以知道前台进程用了系统CPU的0.2/6=3.3%。DB Time/s为0.2,可以看出这个系统是CPU不繁忙的。里面CPU占了0.2,则其它前台等待事件占了0.2 – 0.2 = 0 Wait Time/s。DB CPU占DB Time的比重呢? 0.2/0.2= 100%

Top 5 Timed Events,或许很多人都对它有所耳闻,按照CPU/等待事件占DB Time的比例大小,这里列出了Top 5。如果一个工作负载是CPU繁忙型的话,那么在这里应该可以看到 DB CPU的影子。

转载于:https://www.cnblogs.com/david-zhang-index/archive/2012/08/21/2649252.html

你可能感兴趣的文章
Android程序员必备精品资源
查看>>
Oracle SQL函数之转换函数To_char汇总
查看>>
Linux线程属性总结
查看>>
【原创】Kakfa log包源代码分析(二)
查看>>
Javascript 笔记与总结(2-16)事件对象
查看>>
[裴礼文数学分析中的典型问题与方法习题参考解答]4.4.7
查看>>
JAVA存取对象属性时,如果开程多线程,记得对相关存取方法作原子化操作定义...
查看>>
深度学习 vs. 概率图模型 vs. 逻辑学
查看>>
Eclipse中使用javap运行配置详解
查看>>
DHCP租约时间工作原理
查看>>
Qt移动应用开发(六):QML与C++互动
查看>>
svn代码统计工具的金额
查看>>
2015第32周三
查看>>
Codeforces 56D Changing a String 编辑距离 记忆dp
查看>>
Scala 深入浅出实战经典 第62讲:Scala中上下文界定内幕中的隐式参数实战详解...
查看>>
Android应用Design Support Library完全使用实例
查看>>
中通打印助手-实现快递面单快速打印(免费使用)
查看>>
付款页面DEMO
查看>>
Swift - 使用Core Data进行数据持久化存储
查看>>
[转载]服务器和应用系统迁移方案
查看>>