ITPub博客

首页 > Linux操作系统 > Linux操作系统 > ADDM概述

ADDM概述

原创 Linux操作系统 作者:yantaicuiwei 时间:2011-07-14 10:17:30 0 删除 编辑
 一. 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

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21601207/viewspace-702159/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2010-04-15

  • 博文量
    64
  • 访问量
    236883