AWR
一、概述 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
ADDM
一. ADDM概述 ADDM提供了一个整体的优化方案.基于一段时间内的AWR snapshots可以执行ADDM 分析,它可以帮我们诊断在这段期间内数据库可能存在的瓶颈.
ADDM分析的目标是减小吞吐量的度量值, 在这里我们将它称为"DB TIME".DB TIME是一个累积值(数据库服务器处理用户请求所花费的时间).它包括了等待时间和CPU处理的时间(针对所有活跃的用户进程而言),可以通过查询下面两个视图来获得它的值: V$SESS_TIME_MODEL, V$SYS_TIME_MODEL
注意: ADDM不会将处理用户响应时间作为调优的目标,你应该使用"TRACE"技术来监控它.
通过减小"DB TIME", 使用同样多的系统资源,数据库服务器可以处理更多的用户请求,也就是提高了吞吐量. 通过ADDM报告的问题是按照DB time排序的.
ADDM所诊断到的问题包括这些:
1. CPU的瓶颈
2. 内存结构上的瓶颈 (SGA,PGA是否已经合理地设置 ?)
3. I/O 是否存在性能瓶颈? (I/O子系统是否工作正常 ?)
4. 高负载的SQL语句 (是否存在消耗过量系统资源的SQL ?)
5. 高负荷的PLSQL执行和编译,同时是否存在高负荷的JAVA使用?
6. RAC相关的问题: 什么是全局缓冲的热块和对象? 是否存在潜在的内联(interconnect)问题 ?
7. 应用程序的使用是否已经达到了理想化: 是否存在下面这些问题?
连接池的管理, 过量的解析, 应用程序层的锁竞争.
8. 数据库配置的问题:
日志文件的大小是否合理? 归档是否有问题? 是否频繁的达到检查点? 参数是否合理?
9. 并发的问题: 是否存在"缓冲区忙"的问题?
10. "热"对象以及不同程序领域内的顶级SQL.
ADDM同时也记录了没有问题的区域.
在诊断的同时,ADDM还给出了一些可能的解决方案. ADDM一般会提供多个可能的方案供DBA去选择.在产生建议的时候ADDM充分考虑到了系统变化的多样性.包括:
1. 改变硬件: 增加更多的CPU或者增强I/O子系统;
2. 数据配置: 修改初始化参数文件;
3. 变更Schema: 对一个表或索引进行哈希分区,或者使用自动的段空间管理(ASSM)
4. 更改应用程序: 例如为序列使用"缓存"选项,使用绑定变量;
5. 其它的建议: 对于高负载的SQL,运行"SQL Tuning Advisor"; 对于热块,运行"Segment Advisor".
二. ADDM 分析的结果
ADDM 分析的结果以一些"Finding"的样式来表达. 每个"Finding"都属于以下三种类型之一:
1. 问题: 描述了导致数据库性能问题的根源;
2. 征兆: 包含了可能导致其他问题的信息
3. 信息: 报告其他没有问题的模块
三. ADDM 样例
四. 设置ADDM 缺省情况下,ADDM已经被自动启用,通过初始化参数文件中的STATISTICS_LEVEL来控制.这个参数应该被设置成TYPICAL或者ALL(缺省值是TYPICAL).如果你将这个参数设置成basic,很多Oracle的特性将被屏蔽.
ADDM 对于I/O性能的评估分析在部分程度上依赖于这个DBIO_EXPECTED. 这个参数的含义是读取一个数据块所花费的平均时间(以微秒为单位). Oracle使用的是缺省值(10毫秒), 对于现在流行的硬盘来说, 这是一个比较合适的值.如果你的硬盘比较陈旧,或者你有一个非常好的RAM DISK,请修改这个值.
为了决定DBIO_EXPECTED这个参数该怎样去正确地配置,需要完成下面的步骤: 1. 基于你的机器的硬件,估量一下读取单个数据库块所花费的平均时间. 注意:这个度量应该针对随机的I/O(包括寻道的时间).传统的值应该属于5000-20000微秒这个区间.
2. 为接下来的ADDM执行设置一个时间参数. 例如:如果估计的值是8000微秒,你应该以SYS的身份执行 下面的过程:
EXECUTE DBMS_ADVISOR.SET_DEFAULT_PARAMETER ('ADDM','DBIO_EXPECTED',8000);
五. 通过Oracle Enterprise Manager来访问ADDM:
六. 诊断与ADDM相关的问题: 为了诊断数据库性能问题, ADDM分析可以跨越任意两个snapshots,只要它们满足 下面两个条件: 1. 两个快照在创建过程中没有错误并且没有被删除;
2. 两个快照期间数据库不能发生关闭和启动的事件(同statspack).
最简单的运行ADDM分析的方法就是运行Enterprise Manager.另外,也可以手工地执行 $ORACLE_HOME/rdbms/admin/addmrpt.sql以及dbms_advisor包. 这些脚本和包可以被任何用户执行,只要它们被赋予了ADVISOR的角色.
6.1 使用addmrpt.sql来运行
(译者注:和statspack包中的spreport.sql非常相似)
6.2 使用dbms_advisor包: 基本步骤: 1) 创建一个task: dbms_advisor.create_task ;
2) 设置相关的参数: START_SNAPSHOT,END_SNAPSHOT (通过DBMS_ADVISOR.SET_TASK_PARAMETER来完成)
3) 执行这个task: DBMS_ADVISOR.EXECUTE_TASK
4) 查询相关信息: DBMS_ADVISOR.GET_TASK_REPORT
可以写一个PL/SQL函数,来完成下面这些功能: . 自动识别最接近于指定时间的snapshots . 运行ADDM
create or replace function run_addm (start_time in DATE,end_time in DATE) return varchar2 is begin_snap number; end_snap number; tid number; tname varchar2(30); tdesc varchar2(256); begin -- Find the snapshot IDs corresponding to the given input parameters select max(snap_id) into begin_snap from DBA_HIST_SNAPSHOT where trunc(end_interval_time,'MI')<=start_time;
select min(snap_id) into end_snap from DBA_HIST_SNAPSHOT where trunc(end_interval_time,'MI') >=end_time;
-- set Task name to NULL and let create_task return a unique name for -- this task tname:=' ';
-- set description for this task tdesc:='run_addm( ' || begin_snap || ', ' || end_snap || ' )';
dbms_advisor.create_task('ADDM',tid,tname,tdesc); dbms_advisor.set_task_parameter(tname,'START_SNAPSHOT',begin_snap); dbms_advisor.set_task_parameter(tname,'END_SNAPSHOT',end_snap); dbms_advisor.execute_task(tname); retuen tname; end; /
在SQLPLUS中调用这个函数: 时间区间: 7:00PM -9:00 PM
set pagesize 0 long 1000000 longchunksize 1000 column get_clob form a80;
variable task_name varchar(30);
begin :task_name := run_addm( to_date('19:00:00 (10/20/04)','HH24:MI:SS (MM/DD/YY)'), to_date('21:00:00 (10/20/04)','HH24:MI:SS (MM/DD/YY)')); end; /
--获得addm report select dbms_advisor.get_task_report(:task_name) from dba_advisor_taks t where t.task_name=:taskname and t.owner=SYS_CONTEXT('USERENV','SESSION_USER');
注意: SQLPLUS中的系统变量long需要被设置的足够大 以便可以显示全部的ADDM REPORT,因为 dbms_advisor.get_task_report返回的是一个 CLOB.
七. 与 ADDM相关的视图: DBA_ADVISOR_TASKS DBA_ADVISOR_LOG DBA_ADVISOR_RECOMMENDATIONS DBA_ADVISOR_FINDINGS
|