標籤:des blog io os 使用 ar 資料 sp div
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.sql1. 你是一路斷行符號,就是擷取近期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 0set linesize 121spool d:\ash_rpt.htmlselect 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)
[Oracle] - 效能最佳化工具(2) - ASH