ASH和AWR的關係
ASH內存記錄數據始終是有限的,爲了保存歷史數據,引入了自動負載信息庫(Automatic Workload Repository ,AWR) 由後臺進程MMON完成。ASH信息同樣被採集寫出到AWR負載庫中。由於內存是有限的,所以MMNL進程在ASH寫滿後會將信息寫出到AWR負載庫中。ASH也不是寫出全部數據導AWR,所一般只寫入收集的10%的數據量,而且使用direct-path insert完成,儘量減少日誌的生成,從而最小化數據庫性能影響。
我們也可以直接查詢試圖:
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的生成
@?/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)