如何看懂Oracle数据库报告模板AWR报告

先看数据库报告模板环境版本,压力大小等

然后分析命中率首先你要懂命中率什么意思然后定一个阀值,达到这个阀值有可能会有哪些问题然后向下找出证据

最后吔是最重要的是 等待事件,弄清楚每个等待事件的意义然后向下找证据

事件下面基本可以看作证据,来证明你对命中率和等待事件的分析

所以第一:你要会分析出问题。

第二:要知道AWR都收集哪些数据对你的分析来佐证!

你对这个回答的评价是?

下载百度知道APP抢鲜体驗

使用百度知道APP,立即抢鲜体验你的手机镜头里或许有别人想知道的答案。

AWR (Automatic Workload Repository) 是自动负载信息库的英文缩写AWR報告是Oracle 10g以后版本提供的一种性能收集和分析工具,能提供一个时间段内整个系统资源使用情况的报告通过报告可以了解一个系统的整个運行情况,生成的报告包括多个部分

AWR每小时对v$active_session_history视图(内存中的ASH采集信息,理论为1小时)进行采样一次并将信息保存到磁盘中,并且保留7天7天后旧的记录才会被覆盖。这些采样信息被保存在wrh$_active_session_history视图(写入AWR库中的ASH信息理论为1小时以上)中。而这个采样频率(1小时)和保留时间(7天)是可以根据实际情况进行调整的这就给DBA们提供了更加有效的系统监测工具。

2、什么情况下会用到AWR

DBA对数据库报告模板运行状态及状况嘚监控了解、测试过程中发现数据库报告模板出现瓶颈但无法定位到具体原因时,可以借用AWR报告进行分析定位

数据库报告模板出现性能問题,一般都在三个地方:IO、内存、CPU这三个地方又是息息相关的。假设这个三个地方都没有物理上的故障当IO负载增大时,肯定需要更哆的内存来存放同时也需要CPU花费更多的时间来过滤这些数据。相反CPU时间花费多的话,有可能是解析SQL语句也可能是过滤太多的数据,倒不一定是和IO或内存有关系

CPU:解析SQL语句,尝试多个执行计划最后生成一个数据库报告模板认为是比较好的执行计划,但不一定是最优嘚因为关联表太多的时候,数据库报告模板并不会穷举所有的执行计划这会消耗太多的时间,oracle怎么知道这条数据是你要的另一个就鈈是你要的呢,这是需要cpu来过滤的

内存:SQL语句和执行计划都需要在内存保留一段时间,还有取到的数据根据LRU算法也会尽量在内存中保留,在执行SQL语句过程中各种表之间的连接,排序等操作也要占用内存

IO:如果需要的数据不在内存中,则需要到磁盘中去取就会涉及箌物理IO了,还有表之间的连接数据太多以及排序等操作内存放不下的时候,需要用到临时表空间也会消耗物理io了。

这里说明下ORACLE分配嘚内存中PGA一般只占20%,对于专用服务器模式每次执行SQL语句、表数据的运算等操作,都在PGA中进行的也就是说只能用ORACL分配内存的20%左右,如果哆个用户都执行多表关联而且表数据又多,再加上关联不当的话内存就成为瓶颈了,所以优化SQL很重要的一点就是减少逻辑读和物理讀。

3 如何生成AWR报告

第一步登录ORACLE数据库报告模板服务器,记住当前目录或者切换至AWR想要保存的目录;

第二步SQLplus 用户名/密码@服务连接名,连接oracle数据库报告模板实例如下图所示;

可以生成以下几种类型AWR报告,大部分情况下都是生成本实例的AWR报告

输入生成AWR报告的格式是html的如下圖所示:

输入天数: 根据实际情况输入(如1,代表当天如果2,代表今天和昨天以此往前推)如下图所示:

输入开始值与结束值:(输叺天数后会列出,snap值)

输入AWR报告的名称:名称自定义 回车后就开始自动生产AWR报告如下图所示:

这里说明一下快照节点可以手工创建,根據实际情况执行如下命令:

结束后就可以去指定目录下照AWR报告文件文件为 test_awr.lst,如下图所示:

修改扩展名为HTML下载到Windows平台即可查看,即可用IE咑开AWR报告如下图所示:

AWR报告内容很丰富这里选其中一小部分来讲解,分析AWR报告前先了解一下Oracle的硬解析和软解析首先说一下Oracle对SQL的处理过程。当你发出一条SQL语句交付Oracle在执行和获取结果前Oracle对此SQL将进行几个步骤的处理过程:

检查此SQL的拼写是否语法。

诸如检查SQL语句中的访问对象昰否存在及该用户是否具备相应的权限

其中,软、硬解析就发生在第三个过程里

假设存在,则将此SQL与cache中的进行比较;

假设“相同”僦将利用已有的解析树与执行计划,而省略了优化器的相关工作这也就是软解析的过程。

当然如果上面的2个假设中任有一个不成立,那么优化器都将进行创建解析树、生成执行计划的动作这个过程就叫硬解析。

创建解析树、生成执行计划对于SQL的执行来说是开销昂贵的動作所以,应当极力避免硬解析尽量使用软解析。

打开AWR报告头如下图所示:

Elapsed快照监控时间:如果为了诊断特定时段性能问题则Elapsed不宜过長15分钟~2、3个小时如果是看全天负载那么可以长一些,最常见是60分钟后者120分钟

DB Time:不包括Oracle后台进程消耗的时间,如果DB Time远远小于Elapsed时间说明數据库报告模板比较空闲。

time在79分钟里(其间收集了3次快照数据)数据库报告模板耗时11分钟,RDA数据中显示系统有8个逻辑CPU(4个物理CPU)平均烸个CPU耗时1.4分钟,CPU利用率只有大约2%(1.4/79)说明系统压力非常小。

但是对于批量系统数据库报告模板的工作负载总是集中在一段时间内,如果快照周期不在这一段时间内或者快照周期跨度太长而包含了大量的数据库报告模板空闲时间,所得出的分析结果是没有意义的这也說明选择分析时间段很关键,要选择能够代表性能问题的时间段

显示SGA中每个区域的大小,可用来与初始参数值比较

cache的代价高得多,因此shared pool的设置要确保最近使用的数据都能被cache

显示数据库报告模板负载概况,将之与基线数据比较才具有更多的意义如果每秒或每事务的负載变化不大,说明应用运行比较稳定单个的报告数据只说明应用的负载情况,绝大多数据并没有一个所谓“正确”的值然而Logons大于每秒1~2個、Hard parses大于每秒100、全部parses超过每秒300表明可能有争用问题。

Redo size:每秒产生的日志大小(单位字节)可标志数据变更频率, 数据库报告模板任务的繁重与否。

pool中命中的情形;hard parse则是指都不命中的情况

Hard parses:其中硬解析的次数,硬解析太多说明SQL重用率不高。每秒产生的硬解析次数, 每秒超过100次僦可能说明你绑定使用的不好,也可能是共享池设置不合理这时候可以启用参数cursor_sharing=similar|force,该参数默认值为exact但该参数设置为similar时,存在bug可能导致执行计划的不优。

Sorts:每秒/每事务的排序次数;

Logons:每秒/每事务登录的次数;

Transactions:每秒事务数.每秒产生的事务数反映数据库报告模板任务繁偅与否。

Blocks changed per Read:表示逻辑读用于修改数据块的比例.在每一次逻辑读中更改的块的百分比

Recursive Call:递归调用占所有操作的比率.递归调用的百分比,如果有很多PL/SQL那么这个值就会比较高。

Rollback per transaction:每事务的回滚率.看回滚率是不是很高因为回滚很耗资源 ,如果回滚率过高,可能说明你的数据库报告模板经历了太多的无效操作 ,过多的回滚可能还会带来Undo Block的竞争 该参数计算公式如下:

Profile一节相同,这一节也没有所谓“正确”的值而只能根据應用的特点判断是否合适。在一个使用直接读执行大型并行查询的DSS环境20%的Buffer Hit Ratio是可以接受的,而这个值对于一个OLTP系统是完全不能接受的根據Oracle的经验,对于OLTPT系统Buffer Hit Ratio理想应该在90%以上。

Buffer Nowait表示在内存获得数据的未等待比例在缓冲区中获取Buffer的未等待比率,Buffer Nowait的这个值一般需要大于99%否則可能存在争用,可以在后面的等待事件中进一步确认

Hit表示进程从内存中找到数据块的比率,监视这个值是否发生重大变化比这个值本身更重要对于一般的OLTP系统,如果此值低于80%应该给数据库报告模板分配更多的内存。数据块在数据缓冲区中的命中率通常应在95%以上。否则小于95%,需要调整重要的参数小于90%可能是要加db_cache_size。一个高的命中率不一定代表这个系统的性能是最优的,比如大量的非选择性的索引被频繁访问就会造成命中率很高的假相(大量的db file sequential read),但是一个比较低的命中率一般就会对这个系统的性能产生影响,需要调整命Φ率的突变,往往是一个不好的信息如果命中率突然增大,可以检查TOP buffer get SQL查看导致大量逻辑读的语句和索引,如果命中率突然减小可以檢查TOP physical reads SQL,检查产生大量物理读的语句主要是那些没有使用索引或者索引被删除的。

Redo NoWait表示在LOG缓冲区获得BUFFER的未等待比例如果太低(可参考90%阈徝),考虑增加LOG BUFFER当redo buffer达到1M时,就需要写到redo log文件所以一般当redo buffer设置超过1M,不太可能存在等待buffer空间分配的情况当前,一般设置为2M的redo buffer对于内存总量来说,应该不是一个太大的值

ratio会导致过多的解析,增加CPU消耗降低性能。如果library hit ratio低于90%可能需要调大shared pool区。STATEMENT在共享区的命中率通常應该保持在95%以上,否则需要要考虑:加大共享池;使用绑定变量;修改cursor_sharing等参数

Pool解决。要确保>99%否则存在严重的性能问题。当该值出现问題的时候我们可以借助后面的等待时间和latch分析来查找解决问题。

elapsed)即:解析实际运行时间/(解析实际运行时间+解析中等待资源时间)。如果該比率为100%意味着CPU等待时间为0,没有任何等待

=round(100*1-PARSE_CPU/TOT_CPU),2)。如果这个值比较小表示解析消耗的CPU时间过多。与PARSE_CPU相比如果TOT_CPU很高,这个比值将接近100%這是很好的,说明计算机执行的大部分工作是执行查询的工作而不是分析查询的工作。

Executions就可能出现该比率小于0的情况。该值<0通常说明shared pool設置或者语句效率存在问题造成反复解析,reparse可能较严重,或者是可能同snapshot有关通常说明数据库报告模板性能存在问题。

Sort:在内存中排序的仳率如果过低说明有大量的排序在临时表空间中进行。考虑调大PGA(10g)如果低于95%,可以通过适当调大初始化参数PGA_AGGREGATE_TARGET或者SORT_AREA_SIZE来解决注意这两个参數设置作用的范围时不同的,SORT_AREA_SIZE是针对每个session设置的PGA_AGGREGATE_TARGET则时针对所有的sesion的。

Soft Parse:软解析的百分比(softs/softs+hards)近似当作SQL在共享区的命中率,太低则需要調整应用使用绑定变量 SQL在共享区的命中率,小于<95%,需要考虑绑定如果低于80%,那么就可以认为SQL基本没有被重用

Memory Usage %:对于一个已经运行一段時间的数据库报告模板来说,共享池内存使用率应该稳定在75%-90%间如果太小,说明Shared Pool有浪费而如果高于90,说明共享池中有争用内存不足。這个数字应该长时间稳定在75%~90%如果这个百分比太低,表明共享池设置过大带来额外的管理上的负担,从而在某些条件下会导致性能的丅降如果这个百分率太高,会使共享池外部的组件老化如果SQL语句被再次执行,这将使得SQL语句被硬解析在一个大小合适的系统中,共享池的使用率将处于75%到略低于90%的范围内.

executions>1:执行次数大于1的SQL比率如果此值太小,说明需要在应用中更多使用绑定变量避免过多SQL解析。在┅个趋向于循环运行的系统中必须认真考虑这个数字。在这个循环系统中在一天中相对于另一部分时间的部分时间里执行了一组不同嘚SQL语句。在共享池中在观察期间将有一组未被执行过的SQL语句,这仅仅是因为要执行它们的语句在观察期间没有运行只有系统连续运行楿同的SQL语句组,这个数字才会接近100%

Memory for SQL w/exec>1:执行次数大于1的SQL消耗内存的占比。这是与不频繁使用的SQL语句相比频繁使用的SQL语句消耗内存多少的┅个度量。这个数字将在总体上与% SQL with executions>1非常接近除非有某些查询任务消耗的内存没有规律。在稳定状态下总体上会看见随着时间的推移大約有75%~85%的共享池被使用。如果Statspack报表的时间窗口足够大到覆盖所有的周期执行次数大于一次的SQL语句的百分率应该接近于100%。这是一个受观察の间持续时间影响的统计数字可以期望它随观察之间的时间长度增大而增大。

通过ORACLE的实例有效性统计数据我们可以获得大概的印象,嘫而并不能由此确定数据运行的性能当前性能问题的确定,主要还是依靠下面的等待事件来确认我们可以这样理解两部分的内容,hit统計帮助发现和预测一些系统将要产生的性能问题由此可以做到未雨绸缪。而wait事件就是表明当前数据库报告模板已经出现了性能问题需偠解决,是亡羊补牢的性质

TOP5 time Event是AWR报告概要的最后一节,显示了系统中最严重的5个等待按所占等待时间的比例倒序列示。一个性能良好的系统CPU Time应该在TOP 5的前面,否则说明你的系统大部分时间都用在等待上当我们调优时,总希望观察到最显著的效果因此应当从这里入手确萣下一步做什么。例如‘buffer busy wait’是较严重的等待事件应当继续研究报告中Buffer Wait和File/Tablespace IO区的内容,识别哪些文件导致了问题如果最严重的等待事件是I/O倳件,应当研究按物理读排序的SQL语句区以识别哪些语句在执行大量I/O并研究Tablespace和I/O区观察较慢响应时间的文件。如果有较高的LATCH等待就需要察看详细的LATCH统计识别哪些LATCH产生的问题。

在这里log file parallel write是相对比较多的等待,占用了7%的CPU时间通常借助AWR报告寻找耗时比较长或资源使用比较高的SQL语呴,按各种资源分别列出对资源消耗最严重的SQL语句并显示它们所占统计期内全部资源的比例,这给出我们调优指南例如在一个系统中,CPU资源是系统性能瓶颈所在那么优化buffer gets最多的SQL语句将获得最大效果。在一个I/O等待是最严重事件的系统中调优的目标应该是physical IO最多的SQL语句。

這里列出了耗时比较长的SQL从高到低排序TOP100,在AWR报告中点击SQL ID连接即可跳转到详细的SQL语句的地方

这里其实和云智慧透视宝的一个功能很像,僦是在应用请求信息中透视宝可以抓取到MYSQL数据库报告模板的每个SQL语句的耗时,而且是实时的这点比AWR报告要方便很多,不用设置快照节點实时查看

这个地方是根据CPU time 排序的TOP 100的SQL语句,同样点击SQL ID中的连接可以展开详细的SQL语句

AWR报告的内容很丰富,本文的内容希望能起到一个抛磚引玉的作用大家可以动手实际操作一下,对AWR进一步的研究学习

我要回帖

更多关于 数据库awr报告 的文章

 

随机推荐