oracle 10G特性之awr --zz
时间:2010-09-13 来源:dbconf
oracle推出已经2年多了,但只在04年用过几个月,之后接触的数据库大部分是8i和9i,所以,很多10g的新特性没有接触到。
现在有时间可以学习10g了。打算用一系列的文章来记录学习10g新特性的心得。
一、概述
awr(Automatic Workload Repository)是oracle 10g推出的一个强有力的信息收集工具,它比之前的statspack有显著的改进,收集的信息也更多、更全面,使用方法也更简单。
二、安装
awr是默认安装的,装好了10g的数据库就已经可以使用awr了。
三、配置
awr默认每个小时收集一次统计信息,并且保留7天的数据。awr配置信息可以从以下视图查询:
SQL> select * from dba_hist_wr_control;
DBID SNAP_INTERVAL RETENTION TOPNSQL
---------- ---------------------------- ----------------------- ----------
3939087858 +00000 00:10:00.0 +00002 00:00:00.0 DEFAULT
awr与statspack不同,它不是由job来调度的,而是由MMON来定期收集的。
SQL> show parameter job
NAME TYPE VALUE
-------------------------- ----------- --------------------
job_queue_processes integer 10
SQL> select count(1) from dba_jobs;
COUNT(1)
----------
0
我们可以用dbms_workload_repository.modify_snapshot_settings来修改默认配置
SQL> desc dbms_workload_repository.modify_snapshot_settings
Parameter Type Mode Default?
--------- -------- ---- --------
RETENTION NUMBER IN Y --设定awr信息保留多长时间,单位是分钟,默认是60分钟
INTERVAL NUMBER IN Y --设定收集时间间隔,单位是分钟,默认是1周
TOPNSQL NUMBER IN Y --设定取多少条耗费资源的sql
DBID NUMBER IN Y
如把awr设置为10分钟收集一次、每次收集50条耗费资源的sql,并保留2天的收集数据,可以用如下方式修改
SQL> exec dbms_workload_repository.modify_snapshot_settings(2*24*60,10,50);
PL/SQL procedure successfully completed
可以看出配置已经改变
SQL> select * from dba_hist_wr_control;
DBID SNAP_INTERVAL RETENTION TOPNSQL
---------- -------------------------- ----------------------- ----------
3939087858 +00000 00:10:00.0 +00002 00:00:00.0 50
四、生成报表
1、调用脚本
和statspack一样,awr也提供一个脚本来生成报表。报表的形式有两种:text和html。强烈建议生成html格式的报表,可读性非常强。
脚本位置和名称:$ORACLE_HOME/rdbms/admin/awrrpt.sql
用脚本生成awr报表的过程与生成statspack报表非常类似,你需要以sys用户执行这个脚本,执行过程需要输入报表类型、天数(用来决定显示那几天内的snapshot)、begin_snap、end_snap、以及报表名称等5个参数。
如果不不想手工输入参数,你可以修改$ORACLE_HOME/rdbms/admin/awrrpti.sql文件,把需要到的5个变量设置好,在执行过程就不用输入了。
修改awrrpti这个脚本可以让你自动生成报表。
2、直接用函数
oracle提供2个函数来生成对应的报表:
DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_TEXT :生成text报表
DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML :生成html报表
比如:
执行:select * from table(DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_TEXT(3939087858,1,2,3));
此时在屏幕上就打印出相关的信息。
其实$ORACLE_HOME/rdbms/admin/awrrpt.sql就是通过调用以上两个函数来生成报表的。
五、如何读懂报表
awr产生的报表和statspack报表有点类似,要真正读懂它,需要下很大的工夫,具体的介绍可以看:
http://www.oracle.com/technology/products/manageability/database/pdf/twp03/TWP_manage_automatic_performance_diagnosis.pdf
这里就不表述了。
第五章 管理体系结构
目标
完成本课,你应该能:
描述自动工作负载资料库(AWR)的各种不同的组件
使用活动会话历史
定义AWR快照基线
对服务端的警告订阅应用程序
解释自动任务特征
描述顾问咨询框架
AWR
AWR是新的管理体系结构的中心元素,它为了发现问题和自我调整,为oracle内部服务组件提高了采集,处理,维护和访问性能统计数据.
AWR 概览
AWR的体系结构就是为oracle 10g组件提供了采集维护和使用统计信息来发现问题和自我调整的服务.
AWR的体系结构包括下面两个主要的部分:
在内存中的统计收集工具.这个统计为了性能的原因存在内存中
AWR快照代表了这个工具的永久部分.AWR快照通过数据字典和db control可以访问.
统计由于下面几个原因而永久的存储
统计需要在实例崩溃的时候也能保存.
为了基准的比较有些分析需要历史数据
内容溢出.由于内存不够,当旧的统计被新的统计覆盖的时候,被替换的部分可以恢复为了以后的使用.
新的后台进程叫mmon,有规律的把统计的内存版本传送到磁盘上.
有了AWR,oracle数据库提供了自动捕捉历史统计数据的方法,不需要dba的干预.
AWR的数据
新的基准统计
sql和优化器统计
os统计
等待事件
时间统计
衍生值
活动会话历史
咨询结果
快照统计
数据库特性使用
awr为在内存中收集各种统计提供了新的工具,然而,不是所有的存在的统计都转为使用它.在10g,下面的统计是使用awr统计工具进程收集的:
决定访问和使用数据库段统计的对象统计
用来高效确定基于cpu,使用时间和解析统计的最高的sql语句的sql统计
为高水平性能分析的新的等待事件接口
新的基于花费了多少活动事件的时间
一些当前收集在v$sysstat,v$sesstat的统计
一些包括自我学习和调整的oracle优化器统计
操作系统统计
活动会话历史,代表最近会话的历史.
衍生值提供了一定基准统计的改变的速率
这些统计的部分是以快照的形式存在磁盘上的.Awr提供了看这些快照统计的数据字典视图.
另外,swr还存储各种顾问建议的会话结果和数据库特性使用的统计.
活动会话历史
ASH保留最近的会话活动.swr每过60分钟就进行一次快照,所以最近的一次快照大概是一个小时作用,这样awr就没有足够的信息来进行当前的分析.典型的情况下,当前的分析需要最近的五到十分钟的详细信息.
因为记录会话的活动是非常昂贵的,ash每秒采样V$session,记录会话等待的事件.不活动的会话不会被采样.这个采样工具是非常有效的,因为它直接访问oracle10g内部结构.
ash设计为在内存中的滚动的,在需要的时候早期的信息是会被覆盖的.ash可以通过v$active_session_history视图来访问.这个实例每个样本的每个活动会话有一行.
由于它的大小,把所有的ash数据写到磁盘上是不可接受的.一般是在写到磁盘的时候过滤这个数据.这是通过mmon自动完成的和mmnl在缓冲满了的时候.
基本统计和衍生值
基本的统计代表了原始数据的收集.例如,在系统启动之后计算物理读的次数是基本的统计.
衍生值是从基本的统计得到的二级统计.大部分衍生值都跟中oracle数据库活动变化的速率.
例如,最近60分钟的系统平均物理读时间就是衍生值.衍生值是被内部客户端组件用来系统监控监控,问题检查和自我调节.
例如,addm有个规则,需要系统最近60分钟的平均物理读.另外一个组件也许需要基于相同的基本统计的不同的衍生值:
内存顾问也许需要高峰时间的物理读计数.oracle10g执行系统,会话,文件和等待事件统计的衍生值.
衍生值有衍生值的号,每个衍生值都有衍生名.要想看与衍生值相关的视图,参见oracle 数据库参考.
保留衍生值的主要好处就是当一个组件要即使某些活动的变化率,数据已经有的.以前,你不得不在运行你的工作负载之前或之后来为特定的基本统计即使改变的速率去捕捉统计.有了衍生值,你所需要的就是运行你的工作然后选择相应的衍生值.
工作负载仓库
工作负载仓库是sys所以的保留永久系统性能统计的收集.这个仓库存在sysaux表空间中,是sysaux的主要部件之一.
快照是在一定时间捕捉的一套性能统计.快照用来计算统计变化的速率.每个快照都有快照序列号,在awr是唯一的.
默认的每60分钟收集一次快照.
你可以通过修改interval参数 调整这个频率.因为内部的顾问咨询依赖这些快照,这个参数的调整会影响诊断的精确度.
例如,如果你把interval设置为四个小时,那么你就会丢失60分钟之内的峰值.
在rac环境,每个快照包含集群的所有的节点.每个节点的快照数据有相同的snap_id,但考实例id来区分.大概的,rac中的快照在同一时间捕捉的.
你也可以使用db control来进行手工的快照.手工的快照支持系统产生的自动快照.手工的快照可以在你要捕捉的系统行为的两个时间点跟自动的不一致的时候.
统计的级别
你可以通过statistics_level初始化参数控制统计的捕捉.这里有三种类型的捕捉:
basic:awr统计的计算和衍生值关闭.
typical:只有部分的统计收集.他们代表需要的典型监控oracle数据库的行为.
all:所有可能的统计都被捕捉.这个级别的捕捉应该在很少的情况下,比如你要更多的sql诊断信息的时候才使用.
awr 快照基线
基线是一种机制,这样你可以在重要时间的快照信息集做标记.一个基线定义在一对快照之间,快照通过他们的快照序列号识别.每个基线有且只有一对快照.
基线可以用用户提供的名字也可以用系统的标识符来标识.你可以通过执行dbms_workload_repository.create_baseline过程来创建基线,和知道名称和这对快照的名称.基线的标识就分配给新创建的基线.基线的标识在整个数据库的生命周期是唯一的.
基线用来保留快照的数据.这样属于一个基线的快照会保留到这个基线删除的时候.
通常你可以从以前的代表性的时间来设置基线,用来对现在的系统行为进行比较.你也可以从db control中使用基线来设置基于阈值的警告.
你可以从dba_hist_snapshot或db control中来取到snap_id.
awr快照清除策略
你可以通过设置保留时间来控制历史awr统计数据.总的来说,快照是以时间顺序来自动删除的.属于基线的快照会等到这个快照删除的时候才会删除.
典型的系统中,s如果数据保留七天的话,awr收集的数据大概要专200-300m的空间.空间的消耗主要依赖系统的活动会话的个数.
通过使用modify_snapshot_setting过程,你可以控制:
通过修改retention时间参数有多少awr信息被保留.默认的是七天,最小的值是一天.如果把retention设置为零,自动清除就关闭了.如果awr发现sysaux空间不够,它通过删除那些最老部分的快照来重新使用这些空间.同时,也会给dba发一条警告,告诉sysaux空间不够了.
通过修改interval参数系统是自动产生快照的频率.最小的值是10分钟,默认的是60分钟.典型的值是10,20,30,60,120等等.把interval设为0关闭自动捕捉快照.
db control和awr
db control容许你为捕捉快照来配置retention和interval参数.你可以通过在db control主页的管理标签来访问awr页.
然后典型workload部分的awr链接.
在awr页,你可以
编写workload 资料库设置
看创建的快照的详细信息,也可以手工创建新的
创建基线也教保留快照集
awr报表
awr有个报表生成机制,可以对存储在workload资料库的统计产生汇总报表.这个分析对一段时间的统计做的.这个报表生成机制很像statspack.
报表生产的接口就是sqlplus脚本awrrpt.sql.
这个脚本产生同样的报告,给出对一段时间你的系统的整体行为的信息.这个报表可以是html也可以是text文件.
运行这个脚本必须要select any dictionary权限.这个脚本提示你输入选项如怎么和在哪里生成这个报表:
首先,你需要指明你要生成html还是text格式的
要选择快照的天数:输入天术,和你最近的快照,可选的,你可以使用dba_hist_snapshot表来看你要用哪个snap_id.
开始snap_id和终止snap_id,这个快照对定义你的报表产生的时间间隔.
文件名称,报告写的用户指定的文件.
statspack和awr
在过去,你可以手工的使用statspack来获得历史数据.你也可以继续在oracle10g中使用statspack,但是如果你要使用workload资料库,那你需要更改你的应用程序代码.
statspack用户应该转到10g的workload 资料库.
这里不支持数据从statspack移植到workload资料库.同样,也没有视图来模拟statspack.
服务端产生的警告
服务端的警告:oracle服务器可以自动的发现警告情况.发现一个问题,oracle会给你发送警告信息和可能的补救措施.
服务端产生的警告:概览
一个主要的dba任务就是监控数据库系统监控来看瓶颈和提高系统的性能.oracle 10g接管了这些任务,如果有任何性能问题或资源分配问题,自动的通知你,给你补救措施的建议.
随着新的后来进程mmon的引进,内部的组件可以制定常规的监控行为.
发现问题的组件会为你产生警告信息.同样,前台进程也会发现不训斥的情况,通过mmon引发紧急行为.
这个行为轮流产生发送给你的警告信息.在这里两种情况下,这些警告信息以可靠的和及时的方式产生.
这个警告信息给出了问题的描述和怎么解决它的建议.
另外,oracle数据库在workload资料库保留了衍生值的历史.这些信息可以被自我调整组件使用.
在以前的版本中.很多性能的衍生值都是由em维护.服务端的警告可以由oracle数据库本身更加有效的产生.
警告模型体系结构
警告条件发现是基于内部定义的或自定义的阈值,或某种事件发生.oracle数据库自动的收集大量的衍生值给em来进行计算.
em警告和服务器产生的警告的主要不同在于,衍生值的及时和阈值的确认由mmon进程完成,不像em进行,可以直接访问sga.
服务器产生的警告放入sys的预定义的队列qlert_que中.db control是alert_que的主要消费者.根据db control的设置,你可以设置
email或bp通知.
服务器产生的警告总是显示在db control主页上.
alert_que是个多消费者队列.这样,作为第三方的客户端,你可以订阅这个队列.
在所有的订阅者没有退定的时候,这个警告不会清除.如果你退出这个队列,你就看不到了,但是别的订阅者还可以看到.
服务端警告的类型
这里有两种类型:阈值和非阈值
大多数服务端警告配置为对你的数据库衍生值设置警告或严重警告的阈值.你可以为120多个衍生值定义阈值.例如
每秒物理读
每秒用户提交
sql服务响应时间
除了表空间使用衍生值,这个是数据库相关的,其它的衍生值是实例相关.阈值告警也称为状态的警告.这些警告会在警告条件清除后自己的清除.状态的警告在dba_outstanding_alerts中,如果清除了就进入dba_alert_history.
当突出的警告的严重级别更新了,就又会发出新的警告.当这个问题的条件清除了,这个突出的警告就会移动到警告历史中.根据workload资料库快照的清除策略来清除警告历史.
其它的服务器端的警告对应相应的数据库事件,例如snapshot too old错误,recovery区低于自由空间,可恢复的会话悬挂.这些非阈值的警告,就是无状态的告警.无状态的告警直接进入历史表.清除无状态的告警仅仅在db control环境下有意义,因为db control把无状态的告警存在它自己的资料库中.
out-of-box服务器端产生的告警
默认的,下面的服务告警是打开的
表空间使用(85%告警,97%严重错误)
快照太老
recovery 区低于free space
可恢复的会话挂起
db control 使用模型
服务器端的告警的基本使用模型是这样的:
如果需要,你可以为服务器端的衍生值设置阈值.你可以通过db control或plsql过程来做
你可以通过db control设置通知规则(例如,email地址或中断期限)
当产生警告的时候,db control在警告窗口显示警告.db control给注册的管理员发生通知
当你收到告警的时候,你可以按照警告给出的建议来纠正错误.
db control的警告界面
如果你使用db control,服务端的警告显示在数据库的主页.服务器端的警告的行为跟em相似.
除非了以前支持的,db control还让你可以基于给定的基线来设置阈值或任意两对快照.
大多警告会有相关建议的名称,可以给你更多详细的建议.每个相应的告警信息,db control都会有个链接到相应的
建议.
设置告警阈值
db home-->manage metrics--> edit threshold
这里你可以修改衍生阈值
告警通知
db control home page-->preference-->general--> notification --> rule
---> database availability and critical states --> edit-->
edit notification rule database availability and critical states.
衍生值的详细历史
db control home page --> related links --> all metrics
衍生值和告警视图
衍生值由mmon有规律的计算并且保留在内存中一个小时.这些在内存中的系统基本的衍生值可以通过v$sysmetric 和v$sysmetric_histroy视图进行访问.
磁盘上的衍生值的是通过awr的自动快照机制老收集所有的衍生值.这些可以通过dba_hist_*来访问.
dba_outstanding_alerts描述了oracle数据库认为是突出的警告
dba_alert_history代表了不在突出的有时间限制的历史告警
dba_threshold给你实例定义的阈值
v$alert_types给你每个告警原因类型的信息
pl/sql接口和阈值设定
dbms_server_alert包用来设置衍生值的阈值.
set_threshold定义给定衍生值的阈值
get_threshold读出给定衍生值的设置.
告警消费 手工配置
如果你选择使用你的工具而不是db control来显示告警,你需要订阅,读alert_que,在为告警设置了阈值之后就显示了告警通知.
要创建和订阅这个alert_que的代理,可以使用dbms_aqadm包的create_aq_agent和add_subscriber过程.
接下来,你要为订阅代理指定数据库用户,因为只有一个订阅代理的用户可以访问安全alert_que的信息,你也需要给这个用户分配相应的权限.使用dbms_aqadm报的enable_db_access和grant_queue_privilege过程.
可选的,你可以使用dbma_aq.register过程注册,当警告放入alert_que队列的时候来接受到异步的通知.这个通知可以是emal,http帖子和pl/sql的形式.
要读告警信息,你可以使用dbms_aq_enqueue过程.在信息移出队列之后,使用dbms_server_alert.expand_message过程来详细描述信息.
自动常规管理任务
通过使用调度任务,你可以委派oracle数据库一些需要让你的数据库保持运行良好的重复性的任务.例如,收集优化器统计信息等
作业调度概念
我们简单的看看10g支持自动任务的新的作业调度的功能
管理窗口的定义.当定义了窗口的时候,它有个名字和时间间隔用来为调度的作业定义什么时候是活动的.可选的,它有资源管理计划,在window启动的时候自动使用了.当窗口结束,资源计划恢复到window开始的时候.
可以把作业给一个窗口或窗口组.作业运行在第一个匹配的窗口.
job类的概念,把使用相同资源的分组比如消费者组在给定类或给定数据库服务名由所有的作业使用.job类的作业将跟指定的服务有密切关系.
暂停作业的概念,这个作业不会在作业调度中,除非有enable了.你可以在enable之前修改disable作业的参数.
自动日常管理任务就是基于上面的概念的
dbca和自动化的任务
dbca有新的一页可以让你指定一个新的自动日常管理任务.dbca支持使用oracle推荐的备份战略的备份作业.
使用em添加新的任务
db control home page --> administration --> scheduler --> jobs ----> create
使用pl/sql添加新的任务
公共管理体系结构:顾问咨询框架
基于服务器的顾问:作为新的体系的一部,创建了多个基于服务器的顾问.这些顾问都是设计围绕公共结构,并且使他们更容易管理.例如
addm是根本的oracle数据库调整解决方案.addm自动的发现oracle内的瓶颈,并且还给修改他们的推荐.
顾问框架
addm:自顶向下的实例分析,发现问题和潜在的原因,给出问题的建议.addm可以潜在的调用其它顾问.
sql tuning 顾问:为sql语句提供优化建议
sql access advisor:处理seema的和问题和决定最佳访问路径(例如索引还是物化视图)
pga 顾问:为工作区给出抢修的统计,提成pga的优化建议
sga顾问:负责调整sga的大小.
segment 顾问 :监控对象空间问题和分析增长趋势
undo advisor 给出需要支持回闪到指定时间的参数和需要的额外的空间
顾问体系结构的主要优点
所有的顾问使用同一接口
所有的顾问都是使用workload 仓库的数据.
典型的顾问调整会话
1.创建顾问任务
2.调整相应的任务参数
3.执行分析
4.看结果
db control 和顾问
db control --> related links --> advisor central 链接
dbms_advisor包
这个包在10个中是全新的.它包含顾问模块的所有常量和过程声明
要执行这个过程,必须要有advisor权限.这个权限容许对顾问过程和视图的完全访问
.
数据自动的改变
advisor视图提供了到资料库数据库的只读访问.视图定义为提供任务相关的信息,例如任务参数,工作负载,推荐.
每个视图都有dba和user版本.用户视图容许你看你拥有的顾问数据库,dba视图就包括所有的advisor用户的顾问数据.看需要有跨schema的权限来对他们进行访问.如果增加不是owner的话.
dbms_advisor包 get_task_report函数..
使用pl/sql的例子
1.使用dbms_advisor.create_task过程创建典型的addm类型的advisor任务
2.使用dbms_advisor.set_task_parameter设置任务的参数,例如起始快照.
3.使用dbms_advisor.execute_task来执行
4.使用dbms-advisor.get_task_report来得到分析的结果