<让oracle跑得更快-7> AWR性能报告

[b]AWR是oracle 10g下提供的一种性能收集和分析工具,[/b]可以看做10g以前statspack工具的一个升级版本,它能够提供一个时间段内[color=red]整个系统资源[/color]使用情况的报告,通过这个报告,我们就可以了解一个系统整个运行情况。

读懂AWR报告并不是简单地通过理解里面的性能指标的含义就能掌握的。需要你相当了解oracle的内部机制,方方面面的内部机制,对oracle理解得越深,看AWR报告后对数据库性能的判断也会越准确。
数据库的性能分析,大致上可以分为两个层面[color=red],会话级和系统级(实例级)[/color]。
[b]1. 会话级[/b]
如果我们能够确定某个会话存在性能问题,那么我们就可以针对这个确定的会话做分析。最常见的分析方式是对这个会话做一个sql_trace或者10046事件,通过分析trace文件来定位问题的所在。

[b]2. 实例级[/b]
当我们无法确定哪个会话性能有问题(或者说每个会话性能都有问题)的时候,就需要从实例级别来分析问题的所在,这很有可能是实例整体性能下降导致的。为了获得一个实例的整体性能数据,我们可以查询一些动态视图,比如V$sysstat,V$system_events为了查询实例里的整体性能情况,可能要查询很多方面的信息,比如SQL,比如IO,比如等待,需要查询非常多的视图。针对这种情况,在oracle 10g之前,statspack工具包是做实例级性能分析的首选工具,他能定期收集数据库的性能信息,然后生成报告;在10g里,oracle提供了一个新的性能采集和分析的工具AWR(Automatic Workload Repository),它比statspack收集的信息更多,使用起来更方便。AWR由运行在oracle的后台进程自动,定期收集数据库的性能数据,并将数据保存起来,每一个小时,AWR都会生成一次性能数据快照,为DBA提供某个时刻数据库性能分析的数据信息。
AWR的性能数据是oracle自动采集和保存的,采集周期是1小时,不需要人为干预,我们要做的就是使用这些信息,生成一个AWR性能分析报告。

[b]7.1 生成AWR性能报告[/b]
[color=red](1)首先进入生成AWR报告使用脚本的路径下[/color],它的位置是:
$ORACLE_HOME/rdbms/admin
我们使用了环境变量$ORACLE_HOME,在每个安装了oracle实例软件的机器上,在oracle默认用户下,都应该设置了这个变量。
[color=red](2)然后我们执行以下命令[/color],其中调用的脚本awrrpt.sql就是生成AWR报告用到的脚本:
[img]http://dl2.iteye.com/upload/attachment/0106/2697/ff916ff8-fc03-377e-b64c-bd6760e1c95d.png[/img]

这一部分显示数据库的ID、数据库名称和当前实例名称。
[img]http://dl2.iteye.com/upload/attachment/0106/2685/f38a8078-9e8e-377a-bc31-fcd78af9b7c0.png[/img]

这里AWR要求我们指定报告的显示方式,[color=red]默认是HTML方式[/color],也可以直接输出为文本方式。[b]建议使用HTML方式[/b],因为在报告中有一些页面内部有链接,使用HTML可以更容易定位信息,如果不输入,默认值是HTML.
[img]http://dl2.iteye.com/upload/attachment/0106/2687/f8819735-9bf4-375a-b3d4-7f2ce8d40c84.png[/img]

如果运行的系统是一个RAC结构,这一部分会列出所有的实例。
[img]http://dl2.iteye.com/upload/attachment/0106/2689/e78bc2b7-768d-372f-a71e-ec78f6f4dd6a.png[/img]

AWR询问要显示最近几天的快照信息,我们输入1表示显示最近一天的快照。
[img]http://dl2.iteye.com/upload/attachment/0106/2691/366fd8e1-80a4-31ea-bd7a-c1b67d94e65a.png[/img]

上面列出了最近一天的快照信息,每一个小时AWR生成一个性能快照,我们要指定需要分析性能的时间段,指定一个开始快照号和结束的快照号。
[img]http://dl2.iteye.com/upload/attachment/0106/2693/f3cf3b63-8966-3bb0-aa9e-038a1008553e.png[/img]

我们指定了开始快照号17218和截止快照号17219,它对应的起止时间是从早上9:00到10:00的一小时的时间间隔。
[img]http://dl2.iteye.com/upload/attachment/0106/2695/950d897b-d3b4-3aa9-b8bb-d416eb640f50.png[/img]

指定生成的AWR报告的路径和文件名,这里设定的路径是:
/tmp/myawr.html
完成上面的交互式信息输入后,oracle将会为我们在指定的位置生成AWR报告。
另外,oracle还提供了一个脚本awrrpti.sql,使用这个脚本可以直接生成其数据库或者其他实例上的AWR报告。这个脚本对于RAC结构的数据库很有用处,我们直接连接一个实例就可以生成所有实例的AWR性能报告。

[b]7.2 AWR性能报告分析[/b]
AWR报告文件里包含了非常多的性能指标,如果我们像读小说一样从头读到尾,几乎可以说是毫无收获,肯定会“读了后面忘了前面”。
用户要根据自己的实际情况来从报告中获取自己需要的信息,比如对于一个[color=red][b]OLTP系统[/b][/color]:
[color=red](1) Library Hit
(2) Buffer Hit[/color]
这两项就应该非常关注,因为OLTP系统是一个sql执行非常密集的系统,共享池命中率低就说明有很多sql不能被重用,需要重新解析,这会大大降低系统的性能和sql的执行效率。Buffer hit在OLTP系统中也非常重要。OLTP系统要求sql的执行效率非常高,当sql需要的数据块都能保留在内存中,那么sql执行效率自然要比从磁盘读取数据块要高得多,当这个值越接近于100时,说明内存中sql访问的数据块越多,也就是从磁盘读取的数据块越少。

反之,如果你的系统是一个典型的[color=red]OLAP系统或数据仓库系统[/color],那么完全可以忽略这两个性能指标,即使他们非常低。因为OLAP系统数据库中通常是运行着一些报表分析的sql,这些sql都是一些聚类查询的sql,这些sql执行时间都非常长,而且每个sql查询的数据块可能都不相同,所以数据块很难长时间地缓存在内存当中;另外,OLAP系统本身执行的sql重复率就不高,不需要要求这些sql重用,甚至在OLAP系统中,绑定变量会导致负面作用。实际上,要把一个AWR报告讲清楚的确是一件非常困难的事,因为每个系统都不同,绝不能一概而论,那些所谓的某些指标必须要达到多少,数据库性能才能优化的说法是没有根据的。
具体每一部分的解读可以参考《让oracle跑得更快 oracle 10g 性能分析与优化思路》第13章。
【完】
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值