[Oracle] - 性能優化工具(2) - ASH

ASH和AWR的關係

ASH以V$SESSION爲基礎,每秒採樣一次,記錄活動會話等待的事件。不活動的會話不會採樣,採樣工作由新引入的後臺進程MMNL來完成。
ASH內存記錄數據始終是有限的,爲了保存歷史數據,引入了自動負載信息庫(Automatic Workload Repository ,AWR) 由後臺進程MMON完成。ASH信息同樣被採集寫出到AWR負載庫中。由於內存是有限的,所以MMNL進程在ASH寫滿後會將信息寫出到AWR負載庫中。ASH也不是寫出全部數據導AWR,所一般只寫入收集的10%的數據量,而且使用direct-path insert完成,儘量減少日誌的生成,從而最小化數據庫性能影響。

總結一下:AWR是根據snapshot採樣間隔來進行系統整體性能判斷的。而ASH的粒度更細。比如你的AWR是1小時採樣一次,但是如果一個故障僅僅持續了5分鐘,之前和之後數據庫都正常,那麼這5分鐘到底發生了什麼,要去看ASH。

我們在監控數據庫時,如果是當前正在發生的問題,我們可以通過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生成的視圖)

ASH的生成

執行如下腳本生成ASH報告:
@?/rdbms/admin/ashrpt.sql
1. 你是一路回車,就是獲取最近15分鐘的ASH報表。
2. 你根據oldest ash sample available 時間,然後回車,選擇的是目前可以收集到的最長ASH運行情況
3. 你可以選擇Oldest ASH sample available和Latest ASH sample available之間時間,然後輸入時長,比如30表示30分鐘,取你要取的任何時段的ASH報表
ASH報表也可以直接手工獲取,比如select output from table(dbms_workload_repository.ash_report_html( dbid,inst_num,l_btime,l_etime);
示例:
set pagesize 0
set linesize 121
spool d:\ash_rpt.html
select output from table(dbms_workload_repository.ash_report_html( 977587123,1,SYSDATE-30/1440,SYSDATE-1/1440));
spool off

--包詳細參數:
dbms_workload_repository.ash_report_html(
l_dbid         IN NUMBER, 
l_inst_num     IN NUMBER, 
l_btime        IN DATE,
l_etime        IN DATE,
l_options      IN NUMBER DEFAULT 0,
l_slot_width   IN NUMBER DEFAULT 0,
l_sid          IN NUMBER DEFAULT NULL,
l_sql_id       IN VARCHAR2 DEFAULT NULL,
l_wait_class   IN VARCHAR2 DEFAULT NULL,
l_service_hash IN NUMBER DEFAULT NULL,
l_module       IN VARCHAR2 DEFAULT NULL,
l_action       IN VARCHAR2 DEFAULT NULL,
l_client_id    IN VARCHAR2 DEFAULT NULL,
l_plsql_entry  IN VARCHAR2 DEFAULT NULL)
發佈了203 篇原創文章 · 獲贊 26 · 訪問量 94萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章