oracle addm报告生成,Oracle下批量生成ADDM报告

之前写过一篇文章 Oracle 批量生成AWR报告(http://www.linuxidc.com/Linux/2014-12/110086.htm),我们之前每天监控AWR报告,及时消除性能隐患。现在又多了一种手段,生成ADDM报告,听取下Oracle的建议未尝不可。

ADDM能发现定位的问题包括:

.操作系统内存页入页出问题

.由于Oracle负载和非Oracle负载导致的CPU瓶颈问题

.导致不同资源负载的Top SQL语句和对象——CPU消耗、IO带宽占用、潜在IO问题、RAC内部通讯繁忙

.按照PLSQL和JAVA执行时间排的Top SQL语句.

.过多地连接 (login/logoff).

.过多硬解析问题——由于shared pool过小、书写问题、绑定大小不适应、解析失败原因引起的。

.过多软解析问题

.索引查询过多导致资源争用.

.由于用户锁导致的过多的等待时间 (通过包dbms_lock加的锁)

.由于DML锁导致的过多等待时间(例如锁住表了)

.由于管道输出导致的过多等待时间(如通过包dbms_pipe.put进行管道输出)

.由于并发更新同一个记录导致的过多等待时间(行级锁等待)

.由于ITL不够导致的过多等待时间(大量的事务操作同一个数据块)

.系统中过多的commit和rollback(logfile sync事件).

.由于磁盘带宽太小和其他潜在问题(如由于logfile太小导致过多的checkpoint,MTTR设置问题,过多的undo操作等等)导致的IO性能问题I

.对于DBWR进程写数据块,磁盘IO吞吐量不足

.由于归档进程无法跟上redo日至产生的速度,导致系统变慢

.redo数据文件太小导致的问题

.由于扩展磁盘分配导致的争用

.由于移动一个对象的高水位导致的争用问题

.内存太小问题——SGA Target, PGA, Buffer Cache, Shared Pool

.在一个实例或者一个机群环境中存在频繁读写争用的热块

.在一个实例或者一个机群环境中存在频繁读写争用的热对象

.RAC环境中内部通讯问题

.LMS进程无法跟上导致锁请求阻塞

.在RAC环境中由于阻塞和争用导致的实例倾斜

.RMAN导致的IO和CPU问题

.Streams和AQ问题

.资源管理等待事件

使用方法: 在E盘下面建立addm的目录,将三个文件放入到其中addm.cmd、addm.sql、myaddm.sql.

前提连上的用户需要被赋予两个权限。

grant select any dictionary to user;-----user为生产数据库账号

grant advisor to user;-------user为生产数据库账号

1. 文件名:addm.cmd

内容:  cmd.exe /c sqlplus username/password@servername @addm.sql

2. 文件名: addm.sql

内容:

@@E:\addm\myaddm.sql 0 8

@@E:\addm\myaddm.sql 8 12

@@E:\addm\myaddm.sql 12 14

@@E:\addm\myaddm.sql 14 18

@@E:\addm\myaddm.sql 18 24

exit

3. 文件名: myaddm.sql

内容:

set echo off;

set veri off;

set feedback off;

set termout on;

set heading off;

set linesize 300;

var dbid number;

var inst_num number;

var bid number;

var eid number;

var bhour varchar2(10);

var ehour varchar2(10);

var task_name  varchar2(40);

begin

:bhour      :=  &1;

:ehour      :=  &2;

if(length(:bhour)=1)

then :bhour := '0'||:bhour;

end if;

if(length(:ehour)=1)

then :ehour := '0'||:ehour;

end if;

end;

/

begin

select min(snap_id) into :bid from dba_hist_snapshot s

where (to_char(sysdate-1 , 'yyyy-mm-dd') || ' ' ||:bhour) <=

to_char(s.end_interval_time, 'yyyy-mm-dd HH24')

and (to_char(sysdate-1 , 'yyyy-mm-dd') || ' ' ||:ehour) >=

to_char(s.end_interval_time, 'yyyy-mm-dd HH24');

select max(snap_id) into :eid from dba_hist_snapshot s

where (to_char(sysdate-1 , 'yyyy-mm-dd') || ' ' ||:bhour) <=

to_char(s.end_interval_time, 'yyyy-mm-dd HH24')

and (to_char(sysdate-1 , 'yyyy-mm-dd') || ' ' ||:ehour) >=

to_char(s.end_interval_time, 'yyyy-mm-dd HH24');

if(:ehour=24)

then select max(snap_id) into :eid from dba_hist_snapshot s where (to_char(sysdate,'yyyy-mm-dd')||' 00') =to_char(s.end_interval_time,'yyyy-mm-dd HH24');

end if;

select dbid into :dbid from v$database;

select instance_number into :inst_num from v$instance;

end;

/

column report_name new_value report_name noprint;

select 'PMS_'||:inst_num||'_'||to_char(sysdate-1 ,'yyyymmdd')||'_'||:bhour||'-'||:ehour||'.txt' report_name from dual;

begin

declare

id number;

name varchar2(100);

descr varchar2(500);

BEGIN

name := '';

descr := 'ADDM run: snapshots [' || :bid || ', '

|| :eid || '], instance ' || :inst_num

|| ', database id ' || :dbid;

dbms_advisor.create_task('ADDM',id,name,descr,null);

:task_name := name;

dbms_advisor.set_task_parameter(name, 'START_SNAPSHOT', :bid);

dbms_advisor.set_task_parameter(name, 'END_SNAPSHOT', :eid);

dbms_advisor.set_task_parameter(name, 'INSTANCE', :inst_num);

dbms_advisor.set_task_parameter(name, 'DB_ID', :dbid);

dbms_advisor.execute_task(name);

end;

end;

/

spool &report_name;

set long 1000000 pagesize 0 longchunksize 1000

column get_clob format a80

select dbms_advisor.get_task_report(:task_name, 'TEXT', 'TYPICAL')

from  dual;

spool off;

prompt

prompt End of Report

prompt Report written to &report_name.

set termout on;

clear columns sql;

ttitle off;

btitle off;

repfooter off;

undefine report_name

0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值