Oracle之ASH、AWR、ADDM區別


原網址:http://blog.163.com/www_heql/blog/static/224947041201541894935597/

一、AWRAutomatic Workload Repository)自動工作負載信息庫

    AWROracle 10g中的一個新特性,類似於10g以前的statspack.不過在使用上要比statspack簡單,提供的性能指標要比statspack多很多,能更好的幫助DBA來發現數據庫的性能瓶頸。

    AWR Oracle安裝好后自動啟動的,不需要特別的設置。收集的統計信息存儲SYSAUX表空間SYS模式下,以WRM$_*WRH$_*的格式命名,默認會保留最近7天收集的統計信息。每個小時將收集到的信息寫到數據庫中,這一系列操作是由一個叫MMON的進程來完成的。


1AWR存儲的數據分類:

WRM$表存儲AWR的元數據(awrinfo.sql腳本)

WRH$表存儲采樣快照的歷史數據(awrrpt.sql腳本)

WRI$表存儲同數據庫建議功能相關的數據(ADDM相關數據)


2生成AWR報告:

SQL>@?/rdbms/admin/awrrpt.sql

    根據向導來完成AWR報告的生成。需要注意的是,在選擇時間范圍的時候,中間不能有停機(如果顯示的時間中間有空白行,表示有停機情況)。在選擇報告類型的時候一般使用默認的HTML,方便查看。


3查看數據庫的AWR的設置:

SQL> select snap_interval, retention from dba_hist_wr_control;

SNAP_INTERVAL

---------------------------------------------------------------------------

RETENTION

---------------------------------------------------------------------------

+00000 01:00:00.0(每小時收集一次)

+00007 00:00:00.0(保留7天)


4修改默認設置:

begin

DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGSinterval => 20,

retention => 2*24*60);

end;

注:修改成每20分鍾收集一次統計量,保留最近的2天統計量信息。


5手動收集一次數據庫的統計信息:

exec DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT;

我們還可以通過DBMS_WORKLOAD_REPOSITORY包完成對基線,默認設置的修改等操作。

 

 

二、ASH Active Session History

    ASHV$SESSION為基礎,每秒采樣一次,記錄活動會話等待的事件。不活動的會話不會采樣,采樣工作由新引入的后台進程MMNL來完成。

    ASH buffers 的最小值為1MB,最大值不超過30MB.內存中記錄數據。期望值是記錄一小時的內容。

 

生成ASH報告:

SQLPLUS>@?/rdbms/ashrpt.sql

    ASH 內存記錄數據始終是有限的,為了保存歷史數據,引入了自動負載信息庫(AutomaticWorkload Repository ,AWR) 由后台進程MMON完成。ASH信息同樣被采集寫出到AWR負載庫中。由於內存不是足夠的,所以MMNL進程在ASH寫滿后會將信息寫出到AWR負載庫中。ASH全部寫出是不可接受的,所以一般只寫入收集的10%的數據量,而且使用direct-pathinsert完成,盡量減少日志的生成,從而最小化數據庫性能影響。 寫出到AWR負載庫的ASH信息記錄在AWR的基礎表wrh$active_session_hist中,wrh$active_session_hist是一個分區表,Oracle會自動進行數據清理。

 

三、ADDM Automatic Database Diagnostic Monitor AWR

    是Oracle內部的一個顧問系統,能夠自動的完成最數據庫的一些優化的建議,給出SQL的優化,索引的創建,統計量的收集等建議。


ADDM報告生成:

SQLPLUS>@?/rdbms/addmrpt.sql

    Oracle 性能調整最重要的就是對最影響性能的SQL的調整。在一個應用中,能夠影響到數據庫的只有SQL,也只能是SQL.我們不能一味依靠增強硬件,修改系統、數據庫參數來提高數據庫的性能。更多的應該關注那些最影響性能的SQL語句。ASH報告AWR報告、ADDM報告都能夠找出最影響性能的SQL的工具。在分析ASH報告AWR報告的時候,最重要的就是關注SQL Statistics,SQL Statistics中最應該關注的是SQL ordered byGetsSQL ordered byReads兩個指標。大量的Gets(邏輯讀)會占用大量的CPU時間。大量的Reads(物理讀)會引起IO的瓶頸出現。一般情況下,大量的Gets會伴隨着大量的Reads出現。當然,我們可以通過增大SGA的大小來減少Reads的量。通過這兩個指標找到了最影響性能的SQL,這是首要的,也是必要的。下一步就可以通過創建索引,調整SQL來提高SQL單獨執行時的性能。減少SQL執行時出現的高Gets,Reads.當然整體的性能影響還和 excutions有關,如果這條SQL執行的次數過多,累加起來量還是很大的。那么就可以考慮通過在應用上緩存等手段來減少SQL執行的次數。另外還有一個需要注意的問題就是在開發過程中SQL一定要使用綁定變量,來減少硬解析(大量的硬解析也會消耗大量的CPU時間,占用大量的Latch)。在開發過程中有個原則就是:小事務。操作完成及時的提交。

    我們使用這么多種方式、報告只有一個唯一的目的:找出最影響系統性能的SQL語句。找到SQL下一步就是對它進行調整了。

    我們在監控數據庫時,如果是當前正在發生的問題,我們可以通過v$session+v$sqlarea來找出性能最差的SQL語句。如果在一個小時以內發生的我們可以通過生成ASH報告來找出SQL.如果是1小時以上或幾天我們可以通過AWR報告來找出幾小時,幾天以來最影響系統的SQL語句。ADDM報告基於AWR庫,默認可以保存30天的ADDM報告。

 

我們也可以直接查詢試圖:

v$session (當前正在發生)

v$session_wait (當前正在發生)

v$session_wait_history (會話最近的10次等待事件)

v$active_session_history (內存中的ASH采集信息,理論為1小時)

wrh$_active_session_history (寫入AWR庫中的ASH信息,理論為1小時以上)

dba_hist_active_sess_history (根據wrh$_active_session_history生成的視圖)

四、用腳本如下

@?rdbms/admin/awrrpt.sql是以前statspack的擴展,收集信息更詳細,查看長期的數據庫情況。
@?rdbms/admin/ashrpt.sql
查看當前的數據庫情況,因為ash是每秒從v$session進行進行取樣,awr收集的數據要比ash多得多。
一般收集數據庫信息的話要結合awrash


@?rdbms/admin/addmrpt .sql
相當於是駐留在oracle里的一位專家,是一個自我診斷引擎。產生symptomprobleminfomation,提供解決問題的建議,並自動修復一些具體的故障。
@?rdbms/admin/awrinfo.sql
顯示的都是awr的相關信息,包括快照信息、sysaux空間使用、awr組件、ash等信息。

五、總結
1
awrash的最主要的區別在於:awr是平面的,全面的,ash是立體的,更側重於sessionevent跟蹤,由於業務量大的數據庫的event wait是瞬息萬變,awr很可能會監控不到,為了彌補這個不足,ash才可以對sessionevent進行跟蹤。


2
ashaddm的區別在於:addm偶重於基於對當據庫當前狀態的分析,對存在的問題提供指導性的意見,可以說ashaddmawr的補充


3
awr全面地收集數據庫的狀態,但ash/addm是側重要對收集的數據進行分析,並提供一些有益的建議。


注:上述資料僅供自己記錄筆記學習使用(大多來自網絡、書籍),如有侵權之處請聯系,謝謝!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM