[20150705]從AWR抽取有問題的sql語句.txt

lfree發表於2015-07-06

[20150705]從AWR抽取有問題的sql語句.txt

--閒著沒事,寫一個指令碼從awr資料裡面抽取有問題的sql語句,主要我不想看awr報表,而最佳化80%的問題集中在sql語句,實際上可能更多.
--另外我看報表主要集中在9-11點,下午3-5點這些報表,這樣可能漏調一些晚上的一些schedule,job等相關sql語句的最佳化.

--注意一定要在環境變數中設定
--NLS_DATA_FORMAT='YYYY/MM/DD HH24:MI:SS'

prompt
prompt @deltasqlid begin_time end_time count
prompt for example :  @deltasqlid '2015/06/24' '2015/06/25' 4
prompt

select * from (  SELECT sql_id, event, COUNT (*)
    FROM DBA_HIST_ACTIVE_SESS_HISTORY
   WHERE     sql_id IS NOT NULL
         AND event IS NOT NULL
         AND SAMPLE_TIME BETWEEN '&&1' AND '&&2'
GROUP BY sql_id, event
having count(*)>=&&3
ORDER BY 3 DESC)
union all
  select * from (
  SELECT sql_id, nvl(event,'on cpu'), COUNT (*)
    FROM DBA_HIST_ACTIVE_SESS_HISTORY
   WHERE     sql_id IS NOT NULL
         AND event IS NULL
         AND SAMPLE_TIME BETWEEN '&&1' AND '&&2'
GROUP BY sql_id, event
having count(*)>=&&3
ORDER BY 3 DESC) where rownum<=50;

--說明: event is NULL 我單獨分開,實際上也許是重點,對我們的生產系統,因為我們的機器記憶體很大.基本沒有物理讀的情況.
--另外後面的count可以理解為時間,應該x10,對應的單位應該是秒.
--因為v$active_session_history是1秒取樣1次,而DBA_HIST_ACTIVE_SESS_HISTORY是10秒取樣,這樣算出來的count x 10,對應的應該是這個語句的
--花在對應event的秒數,不知道我理解是否正確.
--我看了基本符合我在awr報表看到的結果.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-1724030/,如需轉載,請註明出處,否則將追究法律責任。

相關文章