ORACLE性能AWR报告的使用和分析

发布 2019-05-28 03:21:20 阅读 8530

为满足业务的运行要求,高性能要求是目前it系统普遍面临的最棘手问题,尤其是客户面对着目前越来越庞大系统和数据,系统整合、数据大集中似乎成了趋势。针对系统性能优化的诊断和分析,数据库方向又是其中的重要一环,本文将针对oracle中常用的性能诊断工具awr报告,进行分析说明。

一、 oracle性能诊断工具。

oracle数据库的性能的诊断工具有很多种,在9i之前主要通过手工进行采集分析,例如使用动态视图和statspack报告来获取数据库性能状态信息,10g以后oracle数据库的性能诊断和改进建议越来越自动化,不过能够熟悉并掌握oracle的相关性能诊断工具的使用,仍对性能问题的准确和有效处理提供有利的帮助。以下是oracle中常用的一些分析工具。

动态性能视图。

动态性能视图是oracle中最常用,也是最简单的一种工具。无论何种性能问题,都能在动态性能视图中找到线索,不过仅10g中动态性能视图就高达几百个,每个视图都包括很多诊断信息,想在众多的视图中找到问题的根源,也是一件费力的事情。一般常用的动态性能视图有:

v$session、v$session_wait、v$process、v$sql、v$lock、v$latch、v$sysstat、v$system_event、v$sgastat。

statspack报告。

statspack 是oracle 9i 之前使用的一个数据库收集工具,收集了数据库全面信息,包括负载概览、前五个等待事件、高速缓存的大小、共享池中sql语句、表空间和文件i/o、库高速缓存、sga统计等。

awr和addm报告。

awr是10g以后提供的一个新工具,oracle 建议用户用这个取代 statspack,它采集与性能相关的统计数据,并从那些统计数据中导出性能量度,以跟踪潜在的问题,并自动生成addm(自动数据库诊断监控)报告,为用户提供数据库性能诊断分析建议。

sql执行计划和建议。

数据库中sql的执行效率可能是对系统影响最大的一个因素,利用oracle执行计划的分析,可以准确知道sql执行的代价,并提供多个方面的调整建议,来进行sql**的优化分析。

二、 生成awr报告。

以下,本文将针对oracle10g后提供的常用性能分析报告awr,依此来描述和分析数据库的性能点和优化建议。

awr由oracle自动产生,默认30分钟采集一次,保留5天的记录。但是也可以通过dbms_workload_repository包来手工创建、删除和修改。使用脚本或来查看awr报告,这两个脚本都在目录$oracle_home/rdbms/admin中,报告可以保存为文本文件或html文件。

生成awr报告的步骤如下:

sqlplus sys/sys@127.0.0.1/scmis as sysdba

sql>@c:/oracle/product/10.2.4/db_1/rdbms/admin/

输入report_type的值:html (注:确定报告的格式)

输入num_days的值:1 (注:选择快照的天数)

输入begin_snap的值:425 (注:起始快照)

输入end_snap的值:427 (注:结束快照)

输入report_name的值:d:\ 注:报告生成的名称和位置)

三、 awr报告分析。

awr报告头记录了数据库名称和起始快照时间,报告头中主要分析elapsed(总时间)和db time(db消耗的时间,不包括后台进行的消耗时间),如果db time/elapsed比值较大,说明数据库系统压力较大,例如下图中系统包括16cpu(2*8核),每个cpu耗时26.7min,负载为26.7/60.

03=44.5%,说明数据库服务器存在较大的负荷。

awr报告总览包括了五个部分:缓存尺寸(cache sizes)、负载性能(load profile)、数据库效率(instance efficiency percentages)、共享池统计(shared pool statistics)、top5事件(top 5 timed events)。这五个部分也就是整个报告核心,记录了数据库系统的关键性能参数和状况。

缓存尺寸(cache sizes)

主要记录总的缓存大小buffer cache和sga缓存尺寸shared pool size,sga是oracle中非常重要的内存共享区,对系统内的所有进程都是共享的。当多个用户同时连接到一个例程时,所有的用户进程、服务进程都可以共享使用这个sga区。shared pool可以分为库缓存(library cache)和数据字典缓存(dictionary cache)。

library cache存放了最近执行的sql语句、存储过程、函数、解析树以及执行计划等。而dictionary cache则存放了在执行sql语句过程中,所参照的数据字典的信息,包括sql语句所涉及的表名、表的列、权限信息等。

负载性能(load profile)

这个部分记录了数据库负载情况,绝对值的分析意义不大,需要与之前的基线数据比较才具有更多的意义,单个的报告数据只说明应用的负载情况,绝大多数据并没有一个所谓“正确”的值。其中重要的几个对于logons大于每秒1~2个,表明可能有争用问题;对于hard parses大于每秒100,parses大于每秒300,表明硬解析太多,sql重用率不高,需要解决sql**变量绑定问题,并调整共享池参数、调整cursor_sharing参数;对于sorts大于每秒100,表明排序过多,需要减少sql**中排序操作,或调整排序空间。

数据库效率(instance efficiency percentages)

记录了oracle关键指标的内存命中率及数据库实例其它操作的效率,这个部分反应了数据库中最重要指标的命中率。

缓冲区未等待率(buffer nowait %)指在缓冲区中获取buffer的未等待比率。该指标的值应接近100%,如果该值较低,则可能要增大buffer cache。

redo缓冲区未等待率(redo nowait %)指在redo缓冲区获取buffer的未等待比率。该指标的值应接近100%,如果该值较低,则有2种可能的情况:1)online redo log没有足够的空间;2)log切换速度较慢。

缓冲区命中率(buffer hit %)指数据块在数据缓冲区中的命中率。该指标的值通常应在90%以上,否则,需要调整。如果持续小于90%,可能要加大db_cache_size。

但有时,缓存命中率低并不意味着cache设置小了,可能是潜在的全表扫描降低了缓存命中率。

内存排序率(in-memorysort%):指排序操作在内存中进行的比率。该指标的值应接近100%,如果指标的值较低,则表示出现了大量排序时的磁盘i/o操作,可考虑加大sort_area_size参数的值。

共享区命中率(libraryhit%):该指标主要代表sql在共享区的命中率。该指标的值通常应在95%以上,否则需要考虑加大共享池(修改shared_pool_size参数值),绑定变量,修改cursor_sharing等参数。

软解析的百分比(soft parse %)该指标是指oracle对sql的解析过程中,软解析所占的百分比。该指标的值通常应在95%以上,如果低于80%,那么就可能sql基本没被重用,sql没有绑定变量,需要考虑绑定变量。

闩锁命中率(latch hit %)指获得latch的次数与请求latch的次数的比率。该指标的值应接近100%,如果低于99%,需要分析闩锁竞争,明确是应用锁、数据字典锁、内存控制锁的哪一种。通过进一步分析latch statistics章节或动态性能视图v$session_wait,v$latch,v$latch_children。

sql语句执行与解析的比率(execute to parse %)指sql语句执行与解析的比率。该指标的值应尽可能到高,如果过低,可以考虑设置session_cached_cursors参数。

共享池统计(shared pool statistics)

记录了在采集点时刻,共享池(share pool)内存被使用的比例。这个指标的值应保持在75%~90%,如果这个值太低,就浪费内存,如果太高,会使共享池外部的组件老化,如果sql语句被再次执行,则就会发生硬分析。其中执行次数大于1的sql比率(sql with executions>1),如果此值太小,说明需要在应用中更多使用绑定变量,避免过多sql解析。

top5事件(top 5 timed events)

这个部分也是awr报告中非常重要的部分,从这里可以看出等待时间在前五位的是什么事件,基本上就可以判断出性能瓶颈在什么地方。通常,在没有问题的数据库中,cpu time总是列在第一个,其他几类重要影响性能的事件分析如下。

缓冲区忙(buffer busy):当一个会话想要访问缓存中的某个块,而这个块正在被其它会话使用时,将会产生该等待事件。这时候,其它会话可能正在从数据文件向缓存中的这个块写入信息,或正在对这个块进行修改。

出现这个等待事件的频度不应大于1%。如果这个等待事件比较显著,则需要根据等待事件发生在缓存中的哪一块(如字段头部、回退段头部块、回退段非头部块、数据块、索引块等),采取相应的优化方法。

文件分散读取(db file scattered read):该等待事件通常与全表扫描有关。因为全表扫描是被放入内存中进行的进行的,通常情况下它不可能被放入连续的缓冲区中,所以就散布在缓冲区的缓存中。

如果这个等待事件比较显著,可能说明对于某些全表扫描的表,没有创建索引或没有创建合适的索引。尽管在特定条件下执行全表扫描可能比索引扫描更有效,但如果出现这种等待时,最好检查一下这些全表扫描是否必要。

ORACLE高级性能优化

一 sga 1 shared pool tunning shared pool的优化应该放在优先考虑,因为一个cache miss在shared pool中发生比在data buffer中发生导致的成本更高,由于dictionary数据一般比library cache中的数据在内存中保存的时间长,所...

AWR报告详细分析

db time不包括oracle后台进程消耗的时间。如果db time远远小于elapsed时间,说明数据库比较空闲。db time cpu time wait time 不包含空闲等待 非后台进程 说白了就是db time就是记录的服务器花在数据库运算 非后台进程 和等待 非空闲等待 上的时间。d...

离心泵性能性能曲线的测定实验报告

实验二离心泵性能曲线的测定。一 实验目的。1.熟悉离心泵的结构和操作方法。2.学会离心泵特性曲线的测定方法 表示方法,加深对离心泵性能的了解。二 实验原理。通过实验测出的q n n p的值算出h 并作h q n q q图。1.扬程h的确定。在泵的吸入口和压出口之间列伯努利方程。由于两点之间管路很短,...