程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> [Oracle]-性能優化工具(2)-ASH

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

編輯:Oracle教程

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)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved