2020年8月12日 星期三

3.8 AWR Baseline

談到資料庫的效能調教,有一個很重要的觀念,那就是基準點 (Baseline),任何效能調教都是基於一個 Baseline 上來進行,例如一句 SQL Statement 執行了 5 分鐘,我們並無法斷定這句 SQL 的效能好或是壞,但若是這句 SQL “昨天執行只需 1 分鐘,今天卻執行了 5 分鐘”,那麼就可以很明確的指出,這句SQL 變慢了,而 “昨天執行只需 1 分鐘” 就是 Baseline。對於 AWR 來說也是同樣的道理,我們可以藉由 AWR Report 來觀察資料庫整體的負載、效能,那麼要怎麼從一份 AWR Report 上去評斷這個資料庫是屬於業務的高峰或低峰期 ? 因而就產生出了 AWR Baseline。


在未建立任何 AWR Baseline 之前,系統預設會建立一個 “SYSTEM_MOVING_WINDOW” 做為預設的 Baseline,我們可以從 dba_hist_baseline 來查詢目前資料庫上有哪些 Baseline:

SQL> select dbid,baseline_id,baseline_name,baseline_type,expiration 

       from dba_hist_baseline;


       DBID  BASELINE_ID                           BASELINE_NAME BASELINE_TYPE EXPIRATION

---------- ----------- ----------------------------------- ------------- ----------

840962220              0                    SYSTEM_MOVING_WINDOW MOVING_WINDOW


SYSTEM_MOVING_WINDOW 表示永遠都是以過去 8 天(預設)的資訊為基礎來當做 Baseline,8 天這個數值是可以更改的,透過 dbms_workload_repository.modifyify_baseline_window_size 來更改,例如將 MOVING_WINDOW 改為 20 天:

begin

dbms_workload_repository.modifyify_baseline_window_size( window_size => 20 );

end;


更改時須同步確認 AWR Snapshot 的保留時間是否足夠。


一般來說 Baseline 必須要是固定的,MOVING_WINDOW 所產生的 Baseline 難免有些失真,若是過去 8 天(預設) 當中有某天的系統發生異常,或是系統負載突然暴增,那麼就會影響整個 Baseline 的水平,有失基準,所以比較好的做法是自行建立 AWR Baseline,使用一段系統最穩定的區間來當做基準點。


建立或刪除 AWR Baseline 可以使用 dbms_workload_repository 來進行:


1. 建立 Baseline:

begin

 dbms_workload_repository.create_baseline(start_snap_id=>337, end_snap_id=>338,baseline_name=>'bs1');

end;


2. 收集 Baseline 統計資訊:

begin

 dbsnmp.bsln_internal.compute_statistics(2,'ORA11');

end;

## compute_statistics 參數為 (baseline_id,instance_name)


3. 刪除 Baseline:

begin

 dbms_workload_repository.drop_baseline('BS1')

end;


另外也可以透過 Database Control 的介面(伺服器 🡪 AWR 基準) 建立 Baseline:


選擇起始與結束 snapshot 當做基準:


建立完成後排定 Baseline 的統計收集:


建立完新的 Baseline 後可以將它套用在效能頁簽的圖表上:


除此之外, Baseline 也可以與一般的 AWR 區間進行比較報表:


第一個期間選擇 Baseline,第二個期間選擇 Snapshot 區間,然後進行比較:


對於資料庫的管理者或是使用者,都會期望資料庫的效能處於一個良好的狀態,但發現效能異常時,往往都憑 “感覺” 來說 “資料庫是不是變慢了”,卻缺乏有效的數據來診斷效能上的問題,利用 AWR Baseline 這個功能,對於效能的基準點便有了一些參考的數據,依此便可以用來判斷資料庫是否在效能上出了問題。

沒有留言:

張貼留言