Oracle AWR ---

beatony發表於2012-11-13

Automatic Workload Repository(AWR)收集、處理和維護效能系統資訊,為效能調優的問題檢測提供了有力的幫助。

AWR收集和處理的統計資訊包括:

1. 段的統計資訊;

2. 時間模型統計資訊(在v$sys_time_model和v$sess_time_model檢視中檢視);

3. 一些在v$sysstat和v$sesstat檢視中收集的系統和會話的統計資訊;

4. 系統中負載最高的一些語句,分別按執行時間、cpu時間、執行次數等標準來統計

5. ASH統計資訊,包含近期會話活動的歷史記錄


若系統引數STATISTICS_LEVEL設定為TYPICAL或ALL將預設啟用AWR來採集統計資訊。這個引數的預設值是TYPICAL,若將其設定為BASIC,將禁用很多資料庫功能,包括 AWR,但你仍可以透過DBMS_WORKLOAD_REPOSITORY包來手動獲得AWR統計資訊。但是,由於許多記憶體中的統計資訊(比如段統計資訊和記憶體顧問資訊)會被禁用,快照中獲得的統計資訊可能不完整。


快照(snapshots)

快照是特定時間範圍內的歷史資料集合,再由ADDM進行效能比較。預設情況下,資料庫每個小時產生一次快照,並將這些統計資訊在工作量倉庫中保留8天。你也可以手動建立快照,但這通常是不必要的。然後這些快照之間的資訊將交給Automatic Database Diagnostic Monitor (ADDM) 進行分析。

AWR比較快照間資訊的差異,然後獲取對系統負載影響最大的一些sql語句,而不是獲取所有sql語句,降低了統計的時間。


基線(Baselines)

基線包含了一個特定時間範圍的效能資料,用來在效能問題發生時,與其他類似的時間段進行比較。基線中的快照會被自動AWR清除程式排除,並無限期保留。

oracle資料庫中包含了三種型別的基線:

固定基線(Fixed Baselines)

固定基線相當於被指定的過去的一個固定的、連續的時間範圍。在建立固定基線以前,要慎重考慮這個時間段,因為基線代表了一個理想狀態的系統狀態。之後,你可以用這個基線和其他基線或者某個時間範圍內的快照來分析效能上的退化情況。

移動視窗基線(Moving Window Baseline)

移動視窗基線相當於AWR保留期間記憶體在的所有AWR資料。在使用自適應閾值時,這將很有用處,因為資料庫可以使用AWR保留期間的所有AWR資料來計算出度量閾值。oracle資料庫自動維護一個系統定義的移動視窗基線。系統定義的移動視窗基線的預設視窗大小等於當前AWR保留的時間,預設為8天。如果你要使用自適應閾值,可以考慮使用更大的移動視窗,例如30天,可以更精確地計算出閾值。你可以改變移動視窗的大小,這個值要等於或小於AWR保留天數。因此若你需要增大移動視窗的大小,首先需要增加AWR的保留時間。

基線模板(Baseline Templates)

你可以建立一個基線,作為未來一個時間連續的時間段可以使用的基線模板。有兩種型別的基線模板:單一的和重複的。你可以為未來一個單獨的連續時間段的基線建立單一基線模板。如果你要提前準備獲取一個未來的時間段,這個會很有用處。例如,你安排好要在週末進行一個系統測試,並準備獲取AWR資料,這種情況下,你可以建立一個單一基線模板,用以在測試時自動獲取該時間範圍內的資料。你也可以使用重複基線模板來建立或者刪除一個重複的時間計劃,當你想自動獲取一個連續的時間範圍,這將很有用。例如,你可能希望在一個月裡的每週一早晨獲取AWR資料,這種情況下,你可以建立一個重複基線模板來自動為每個週一建立基線,並且在設定了過期時間(例如一個月)後,自動刪除過期的基線。


自適應閾值(Adaptive Thresholds)

自適應閾值可以幫你以最低的開銷監控和檢測出效能問題。自適應閾值能夠從在移動視窗基線捕獲到的度量值裡得到的統計資訊中,為系統度量自動設定警告和關鍵報警(warning and critical alert)的閾值。這些統計資訊每週會重新生成,並可能由於系統效能隨著時間變化改變,而產生新的閾值。

打個比方,很多資料庫白天是一個OLTP系統,而到晚上需要執行一些批次程式(例如生成報表)。每個事務響應時間的效能度量對檢測OLTP的效能退化問題在白天可能很有用,但是這個閾值常常對於批次工作來說會太低,而頻繁觸發報警。自適應閾值能檢測到這樣的工作量模式,並自動為白天和夜裡設定不同的閾值。


自適應閾值的型別有兩種:

最大值的百分比:閾值以最大值的百分比倍數的方式來計,

重要性級別:閾值被設為一個統計學中的百分位來觀察基於移動視窗基線資料的閾值以上的值,來體現異常程度。百分位能指定為以下幾種:高(0.95),100箇中只有5個能超過這個值;非常高(0.99):100箇中只有1個能超過這個值;嚴重的(0.999):1000個鐘只有1個能超過這個值;極端的(0.9999):10000個鐘只有1個能超過這個值。

當一個系統以高峰期工作量來設計的,並且你希望在當前工作量接近或超過先前的高值時觸發報警,最大值百分比閾值將非常有用。例如,每秒產生redo量的度量就是個典型的例子。

重要性級別閾值在以下情況很有用:當系統執行正常時表現得很穩定,但當效能變差時可能會在一個大範圍內波動。例如,每個事務的響應時間的度量在一個最佳化過的OLTP系統上將表現平穩,但當效能問題凸顯時,可能會波動很大。採用重要性級別閾值,當環境產生不正常的度量值和系統效能時觸發報警。


空間消耗(Space Consumption)

以下因素可以被用來判斷AWR的空間消耗:在任一給定時間系統中的活動會話數;快照時間間隔,時間間隔越小,快照產生越頻繁,增加AWR採集的資料的佔用空間;歷史資料保留時間

預設情況下,快照每小時捕獲一次,並在資料庫中儲存8天。使用這些預設設定,一個典型的併發量為10個會話數的系統大約需要200-300M的空間來存放AWR資料。但是在降低保留時間的時間,請注意,若AWR中的資料不足,可能會影響一些元件和功能的準確性和精確度:ADDM、SQL Tuning Advisor、Undo Advisor、Segment Advisor。


可能的話,Oracle建議將AWR保留時間設得足夠來,至少能捕獲一個完整的工作量週期。當你的系統工作量週期為1周,比如工作日是OLTP的工作負荷,而在週末執行批次工作,則預設的8天保留時間不需要去修改。當如果你的系統的高峰期在每個月的月末,那麼你可能需要將這個保留時間更改到1個月。

例外情況下,你可以將快照時間間隔改成0來關閉自動收集快照。在這種情況下,工作量和統計資料的自動收集將被停止,且許多Oracle資料庫的自動功能將不能使用。另外,你不能手動建立快照,因此Oracle強烈建議不要關閉snapshot的自動收集。




管理工作量倉庫


管理快照


建立快照:DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT ();
刪除快照:DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE (low_snap_id => 22,high_snap_id => 32, dbid => 3310949047); 屬於這個時間範圍內的ASH資料也將被清除
修改快照設定:DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS( retention => 43200,interval => 30, topnsql => 100, dbid => 3310949047); 相關時間的單位為分鐘。


管理基線


建立基線

DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE (start_snap_id => 270,
end_snap_id => 280, baseline_name => 'peak baseline',
dbid => 3310949047, expiration => 30);

刪除基線

DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE (baseline_name => 'peak baseline',
cascade => FALSE, dbid => 3310949047); --若cascade指定為true,將同時刪除關聯的快照

重新命名基線

DBMS_WORKLOAD_REPOSITORY.RENAME_BASELINE (
old_baseline_name => 'peak baseline',
new_baseline_name => 'peak mondays',
dbid => 3310949047);

顯示基線度量

select * from (DBMS_WORKLOAD_REPOSITORY.SELECT_BASELINE_METRICS (
baseline_name => 'peak baseline',
dbid => 3310949047,
instance_num => '1'));

修改預設移動視窗基線的視窗大小

DBMS_WORKLOAD_REPOSITORY.MODIFY_BASELINE_WINDOW_SIZE (
window_size => 30,
dbid => 3310949047); --window_size單位是天,這個引數值必須小於等於當前AWR的保留時間


管理基線模板


建立單一基線模板
DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE_TEMPLATE (
start_time => '2009-04-02 17:00:00 PST',
end_time => '2009-04-02 20:00:00 PST',
baseline_name => 'baseline_090402',
template_name => 'template_090402', expiration => 30,
dbid => 3310949047); --若不指定expiration引數,建立的基線將不會過期

建立重複基線模板

DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE_TEMPLATE (
day_of_week => 'monday', hour_in_day => 17,
duration => 3, expiration => 30,
start_time => '2009-04-02 17:00:00 PST',
end_time => '2009-12-31 20:00:00 PST',
baseline_name_prefix => 'baseline_2009_mondays_',
template_name => 'template_2009_mondays',
dbid => 3310949047); --duration引數單位為小時

刪除基線模板

DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE_TEMPLATE (
template_name => 'template_2009_mondays',
dbid => 3310949047);


傳輸AWR資料


oracle資料庫允許在不同的系統上傳輸AWR資料,若你想在單獨的系統中來分析AWR資料,這個將會有用。
從源庫中抽取資料:@$ORACLE_HOME/rdbms/admin/awrextr.sql
匯入到目標庫中:@$ORACLE_HOME/rdbms/admin/awrload.sql
資料使用資料泵來匯出匯入,因此還需要建立一個directory




AWR相關檢視


v$active_session_history
顯示活躍的資料庫會話的活動,每秒取樣一次

v$metric和v$metric_history

提供度量資料來跟蹤系統效能。檢視被組織成好幾個組,這些組定義在v$metricgroup檢視中

DBA_HIST檢視

Plain程式碼
  1. DBA_HIST_ACTIVE_SESS_HISTORY 展示記憶體中活動會話歷史資訊   
  2. DBA_HIST_BASELINE 展示捕獲的基線的資訊   
  3. DBA_HIST_BASELINE_DETAILS 展示特定基線的明細資訊   
  4. DBA_HIST_BASELINE_TEMPLATE 基線模板相關資訊   
  5. DBA_HIST_DATABASE_INSTANCE 資料庫環境   
  6. DBA_HIST_DB_CACHE_ADVICE 根據歷史資料預測在不同的cache size下的物理讀   
  7. DBA_HIST_DISPATCHER 每個snapshot下排程程式的資訊   
  8. DBA_HIST_DYN_REMASTER_STATS 動態remastering程式的統計資訊   
  9. DBA_HIST_IOSTAT_DETAIL 按未見型別和功能來統計的歷史I/O資訊   
  10. DBA_HIST_SHARED_SERVER_SUMMARY 共享的統計資訊   
  11. DBA_HIST_SNAPSHOT 快照資訊   
  12. DBA_HIST_SQL_PLAN 執行計劃   
  13. DBA_HIST_WR_CONTROL AWR控制資訊  



生成AWR報告


生成一個典型的AWR報告:
Plain程式碼
  1. 1. At the SQL prompt, enter:   
  2. @$ORACLE_HOME/rdbms/admin/awrrpt.sql   
  3. 2. Specify whether you want an HTML or a text report:   
  4. Enter value for report_type: text   
  5. In this example, a text report is chosen.   
  6. 3. Specify the number of days for which you want to list snapshot IDs.   
  7. Enter value for num_days: 2  
  8. A list of existing snapshots for the specified time range is displayed. In this   
  9. example, snapshots captured in the last 2 days are displayed.   
  10. 4. Specify a beginning and ending snapshot ID for the workload repository report:   
  11. Enter value for begin_snap: 150  
  12. Enter value for end_snap: 160  
  13. In this example, the snapshot with a snapshot ID of 150 is selected as the   
  14. beginning snapshot, and the snapshot with a snapshot ID of 160 is selected as the   
  15. ending snapshot.   
  16. 5. Enter a report name, or accept the default report name:   
  17. Enter value for report_name:   
  18. Using the report name awrrpt_1_150_160   
  19. In this example, the default name is accepted and an AWR report named   
  20. awrrpt_1_150_160 is generated.  

生成環境下的報告:@$ORACLE_HOME/rdbms/admin/awrgrpt.sql
生成指定例項的報告:@$ORACLE_HOME/rdbms/admin/awrrpti.sql

生成指定例項的RAC AWR報告@$ORACLE_HOME/rdbms/admin/awrgrpti.sql

生成一條sql語句的AWR報告@$ORACLE_HOME/rdbms/admin/awrsqrpt.sql --需要指定sql_id

生成指定例項中的sql語句的AWR報告@$ORACLE_HOME/rdbms/admin/awrsqrpi.sql



生成AWR對比報告


我們還可以透過生成AWR對比報告,將出現效能問題的兩個snapshot間的統計資訊與前面比較正常的兩個snapshot間的統計資訊進行比較。

生成AWR對比報告的過程如下:

Plain程式碼
  1. 1. At the SQL prompt, enter:   
  2. @$ORACLE_HOME/rdbms/admin/awrddrpt.sql   
  3. 2. Specify whether you want an HTML or a text report:   
  4. Enter value for report_type: html   
  5. In this example, an HTML report is chosen.   
  6. 3. Specify the number of days for which you want to list snapshot IDs in the first   
  7. time period.   
  8. Enter value for num_days: 2  
  9. A list of existing snapshots for the specified time range is displayed. In this   
  10. example, snapshots captured in the last 2 days are displayed.   
  11. 4. Specify a beginning and ending snapshot ID for the first time period:   
  12. Enter value for begin_snap: 102  
  13. Enter value for end_snap: 103  
  14. In this example, the snapshot with a snapshot ID of 102 is selected as the   
  15. beginning snapshot, and the snapshot with a snapshot ID of 103 is selected as the   
  16. ending snapshot for the first time period.   
  17. 5. Specify the number of days for which you want to list snapshot IDs in the second   
  18. time period.   
  19. Enter value for num_days2: 1  
  20. A list of existing snapshots for the specified time range is displayed. In this   
  21. example, snapshots captured in the previous day are displayed.   
  22. 6. Specify a beginning and ending snapshot ID for the second time period:   
  23. Enter value for begin_snap2: 126  
  24. Enter value for end_snap2: 127  
  25. 7. Enter a report name, or accept the default report name:   
  26. Enter value for report_name:   
  27. Using the report name awrdiff_1_102_1_126.txt   
  28. In this example, the default name is accepted and an AWR report named   
  29. awrdiff_1_102_126 is generated.  

RAC下的對比報告@$ORACLE_HOME/rdbms/admin/awrgdrpt.sql

指定例項 @$ORACLE_HOME/rdbms/admin/awrddrpi.sql

RAC指定例項@$ORACLE_HOME/rdbms/admin/awrgdrpi.sql


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22578826/viewspace-749097/,如需轉載,請註明出處,否則將追究法律責任。

相關文章