Oracle下批量產生ADDM報告

來源:互聯網
上載者:User

Oracle下批量產生ADDM報告

之前寫過一篇文章 Oracle 批量產生AWR報告(),我們之前每天監控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問題
.資源管理等待事件

Oracle AWR報告產生與查看

在CentOS 6.4下安裝Oracle 11gR2(x64)

Oracle 11gR2 在VMWare虛擬機器中安裝步驟

Debian 下 安裝 Oracle 11g XE R2

Oracle AWR報告產生步驟

使用方法: 在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

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.