Oracle RAT介紹及最佳實踐

kunlunzhiying發表於2016-03-29

Oracle Real Application Testing(簡稱RAT)是11g的一個重要的feature,其推出的初衷是為了滿足資料中心變更後有很好的方法和工具去衡量這些變更對於生產環境的應用帶來的影響,更好的評估諸如硬體升級,軟體升級,架構變化等等對於客戶應用程式的影響。

Real Application Testing其實有兩個解決方法,分別是Database Replay和SPA(SQL Performance Analyzer)。

Database Replay,資料庫回放顧名思義可以理解為一個錄影機,透過在源系統上把實時應用產生的負載錄製下來,並拿到變更後的環境進行播放,從而進行一個對比。資料庫回放分為四個階段完成:錄製、預處理、回放、結果分析和報告。

SPA就是針對更細顆粒的SQL給出變更前後的執行結果,並進行分析和建議。SPA一般配合在資料庫回放中進行使用。

下面重點介紹資料庫回放中的四個步驟如何完成。

1. 錄製(為了支援老版本的資料庫,RAT提供了一個開啟捕捉的開關引數,在10.2的環境也可以使用)

1.1 首先建立一個作業系統目錄,用於存放錄製的檔案
1.2 在資料庫中建立一個目錄,用於跟OS的目錄對應:

create or replace directory “sample_cap_dirobj” as ‘/tmp/sample_cap_dir’;

1.3 設定捕捉的過濾條件,有時候我們需要限定只捕捉部分的工作負載,可以透過這個設定來達成:

exec dbms_workload_capture.add_filter(
‘sample_cap_filter’,
‘‘,
‘[VALUE]’);

比如,只捕捉SCOTT使用者的負載:
exec dbms_workload_capture.add_filter(‘sample_cap_filter2’, ‘USER’, ‘SCOTT’);

1.4 檢查下限定條件設定的是否正確:
select type, name, attribute, status, value from dba_workload_filters;

1.5 開始捕捉:
exec dbms_workload_capture.start_capture(‘sample_cap_name’, ‘sample_cap_dirobj’, NULL, ‘INCLUDE’);

1.6 使用下面的檢視檢查當前的捕捉情況和狀態:

select name, directory, status, start_time, end_time, duration_secs, errors
from dba_workload_captures;

一般情況,捕捉的時候如果沒有設定捕捉的時長,就需要透過手工的命令進行停止。

1.7 停止捕捉:
exec dbms_workload_capture.finish_capture;

1.8 為了分析變更前後的負載執行情況,推薦在捕捉結束之後進行匯入一個AWR報告:
declare
capture_id number;
begin
select max(id) into capture_id
from dba_workload_captures
where status = ‘COMPLETED’;

dbms_workload_capture.export_awr(capture_id);
end;
/

2 預處理(預處理之前需要把捕捉好的檔案copy到變更後的環境,預處理的資料庫版本需要跟回放的版本保持一致)

2.1 同樣建立一個目錄的物件指向目標環境的錄製後的檔案

create or replace directory “sample_rep_dirobj” as ‘/tmp/sample_rep_dir’;

2.2 預處理:

exec dbms_workload_replay.process_capture(‘sample_rep_dirobj’);

2.3 初始化播放:

exec dbms_workload_replay.initialize_replay(‘sample_rep_name’, ‘sample_rep_dirobj’);

2.4 如果播放環境和捕捉環境資料庫配置不同,則需要進行一個對映的過程:

exec dbms_workload_replay.remap_connection(, ‘‘);

比如:
exec dbms_workload_replay.remap_connection(1, ‘(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=sample_host)(PORT=1234))(CONNECT_DATA=(SERVICE_NAME=sample_sid)))’);

2.5 設定播放模式,可以支援同步和非同步兩種方式:

exec dbms_workload_replay.prepare_replay(synchronization => TRUE, connect_time_scale => 100, think_time_scale => 100, think_time_auto_correct => FALSE);

3 回放(需要準備好相應的客戶端,包括啟動客戶端和開始回放兩個步驟)
3.1 準備客戶端(RAT提供了客戶端的工具wrc,位於ORACLE_HOME/bin/目錄下)

根據工作負載的強度大小,準備相應的客戶端,可以使用wrc的評估模式來衡量大約需要多少客戶端。

$ORACLE_HOME/bin/wrc / mode=calibrate replaydir=/tmp/sample_rep_dir

3.2 啟動客戶端:這個時候客戶端屬於就緒狀態,等待播放開始

$ORACLE_HOME/bin/wrc / replaydir=/tmp/sample_rep_dir

3.3 開始播放:

exec dbms_workload_replay.start_replay;

3.4 播放結束

exec dbms_workload_replay.cancel_replay;

4. 報告和分析
4.1 分別匯入捕捉和回放時候的AWR:

select dbms_workload_capture.import_awr(, ‘SYSTEM’) from dual;
select dbms_workload_replay.import_awr(, ‘SYSTEM’) from dual;

4.2 檢視捕捉和回放時候的報告:

select dbms_workload_capture.report(, ‘TEXT’) from dual;
select dbms_workload_replay.report(, ‘TEXT’) from dual;

上面全部是透過命令列的方式來完成的Database Replay的過程。如果你熟悉EM的操作,透過EM來完成同樣的工作更加簡單,而且直觀,Oracle也是推薦你透過EM的方法來完成捕捉,準備,回放和報告的。

- See more at:

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

相關文章