Oracle replayc測試

jason_yehua發表於2022-11-30

執行流程

Replay  流程

Database Replay  實施的流程是workload_capture->workload preprocess->replay client prepare->replay->generate replay report,對於同一個capture可以進行多次replay

 

執行資料庫

生產資料庫:用於workload_capture,即負載捕獲

遷移資料庫:用於workload_ preprocess和replay,即負載預處理和負載重放

Replay client  :用於發起workload的客戶端程式

生產資料庫

建立capture目錄

需要確保目錄下無任何檔案

mkdir -p /home/oracle/capdir

create or replace directory capdir as '/home/oracle/capdir';

查詢是否有原來的capture任務

SQL> SELECT id, name FROM dba_workload_captures;

根據id 用以下進行刪除:

SQL> exec dbms_workload_capture.delete_capture_info(2);

 

建立過濾器

過濾器可以透過START_CAPTURE 過程的DEFAULT_ACTION 引數,引數值  INCLUDE  排除(預設)  或者  EXCLUDE  包含  過濾器。

建立  HEAGLEDB  使用者執行資訊的過濾器:

EXEC DBMS_WORKLOAD_CAPTURE.ADD_FILTER ('filter_user1','USER','HEAGLEDB');

 

過濾器其他方式:

capture  所有的資訊,可以跳過add_filter設定

查詢過濾器

select * from dba_workload_filters;

 

執行Capture

10g  資料庫需要開啟PRE_11G_ENABLE_CAPTURE

alter system set PRE_11G_ENABLE_CAPTURE=true;

函式:

DBMS_WORKLOAD_CAPTURE.START_CAPTURE (

   name              IN  VARCHAR2,

   dir               IN  VARCHAR2,

   duration          IN  NUMBER   DEFAULT NULL,

   default_action    IN  VARCHAR2 DEFAULT 'INCLUDE',

   auto_unrestrict   IN  BOOLEAN  DEFAULT TRUE,

   capture_sts       IN  BOOLEAN  DEFAULT FALSE,

   sts_cap_interval  IN  NUMBER   DEFAULT 300);

 

常用全庫捕獲:

BEGIN

    DBMS_WORKLOAD_CAPTURE.start_capture (name     => 'pri_capture_1',

                                         dir      =>'CAPDIR',

                                         duration => NULL);

 END;

/

 

 

如果上面使用過濾器,可以使用以下語法。  注意:exclude 意思是包含上面過濾器中的任務 

BEGIN

DBMS_WORKLOAD_CAPTURE.START_CAPTURE (

   name              => 'pri_capture_1',

   dir               => 'CAPDIR',

   default_action    => '  EXCLUDE  ',

   duration          => NULL);

END;

/

 

Sql  執行

生產資料庫執行階段。

停止 capture  

BEGIN

DBMS_WORKLOAD_CAPTURE.finish_capture;

END;

/

 

獲取capture ID

SELECT DBMS_WORKLOAD_CAPTURE.get_capture_info('CAPDIR')   FROM dual;

select id, name, status,dir_path from dba_workload_captures;    

 

 

查詢捕獲資訊

可以在捕獲路徑下獲取已生成的報告wcr_cr.html、wcr_cr.text。

set pagesize 0 long 30000000 longchunksize 2000 line   150

spool pri_capture.html

select dbms_workload_capture.report (  11  ,'HTML')   from dual;

spool off

注:11 為的capture   id。

 

 

匯出awr報告

exec dbms_workload_capture.export_awr (capture_id => 11);

 

注:11 為的capture id。

 

查詢dba_workload_captures

select id,AWR_BEGIN_SNAP,AWR_END_SNAP from dba_workload_captures;

 

遷移資料庫

建立directory

cap and capfiles  上傳到目標伺服器

 

建立directory

mkdir -p /oracle/replay

CREATE OR REPLACE DIRECTORY db_replay_capture_dir AS '/oracle/replay';

節點1

scp -r /oracle/replay/* oracle@168.68.19.138:/oracle/replay/

 

載入capture日誌

使用PROCESS_CAPTURE過程來準備capture logs。

exec DBMS_WORKLOAD_REPLAY.PROCESS_CAPTURE('DB_REPLAY_CAPTURE_DIR');

執行完畢後,會生成wcr_process.wmd,wcr_login.pp, wcr_seq_data.extb, wcr_scn_order.extb , wcr_conn_data.extb等檔案。

 

初始化replay

使用Initializing replay 裝載metadata到tables裡:

EXEC DBMS_WORKLOAD_REPLAY.initialize_replay (replay_name => 'replay',  replay_dir  => 'DB_REPLAY_CAPTURE_DIR');

將資料改成PREPARE REPLAY 模式:

exec DBMS_WORKLOAD_REPLAY.PREPARE_REPLAY();

預設synchronization引數TRUE。

 

檢查replay的狀態:

set lin 160

col name for a20

col status for a20

select name,status from  dba_workload_replays;

啟動重放客戶端 

評估客戶端需求

wrc MODE=calibrate REPLAYDIR=/oracle/replay

前臺執行replay:

wrc system/mhqx1190 mode=replay replaydir=/oracle/replay

可以後臺執行  (可選)

nohup wrc system/mhqx1190 mode=replay replaydir=/oracle/replay &

 

執行replay

執行時間跟生產庫獲取的時間有關

exec   DBMS_WORKLOAD_REPLAY.START_REPLAY;

select id,   name, status from dba_workload_replays;

初始狀態:PREPARE

執行狀態:IN PROGRESS

完成狀態:COMPLETED

停止replay

如果希望在完成replay 前stop replay過程,呼叫CANCEL_REPLAY 過程即可。

exec DBMS_WORKLOAD_REPLAY.CANCEL_REPLAY ();

 

獲取replay報告

select id, name, status from dba_workload_replays;

 

set pagesize 0 long 30000000 longchunksize 2000 line 150

spool /home/oracle/replay_report.html

select dbms_workload_replay.report(replay_id =>  46  ,format => 'HTML') from dual;

spool off

注:46為上面的replay id。

 

匯入capture awr資料

匯入Capture AWR data 到測試資料庫,比較replay AWR data

set serveroutput on

declare
capid number := 0;
BEGIN
capid := DBMS_WORKLOAD_CAPTURE.GET_CAPTURE_INFO(dir =>'
  DB_REPLAY_CAPTURE_DIR  ');
dbms_output.put_line('capid is ' || capid);
END;
/

輸出:  1

select dbms_workload_capture.import_awr(capture_id => 1, staging_schema => 'SYSTEM') from dual;  

輸出:1959014922

SQL> select snap_id,dbid from dba_hist_snapshot where dbid=  1959014922  ;

   SNAP_ID       DBID

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

      3212 1959014922

      3213 1959014922

 

獲取capture資訊

SQL> select id, awr_begin_snap, awr_end_snap from dba_workload_captures;

1           3212         3213

獲取replay資訊

SQL> select id, awr_begin_snap, awr_end_snap from dba_workload_replays;

           3           6414         6415

   

比較capture和replay

set serveroutput on

spool /home/ora19c/compare_period_report.html

declare

  v_rlt        clob;

  v_replay_id1 number   := 46;

  v_replay_id2 number   := null;

  v_snum       number := 1;

  v_length     number;

  v_char       varchar2(32767);

begin

    dbms_workload_replay.compare_period_report(replay_id1 =>   v_replay_id1,

                                               replay_id2 => v_replay_id2,

                                               format     => 'HTML',

                                             result       => v_rlt);

  v_length :=   dbms_lob.GETLENGTH(v_rlt);

  while (v_snum <   v_length) loop

    v_char :=   dbms_lob.substr(lob_loc => v_rlt,

                                amount  => 32767,

                                offset  => v_snum);

    v_snum := v_snum +   32767;

      dbms_output.put_line(v_char);

  end loop;

end;

/

 

awr  效能比較報告

生成awr比較報告

set  pagesize  0  long  30000000  longchunksize  2000  heading  off  line  1000

spool  /  home  /  oracle  /  replay  /  awrdiff_10g_11g.html

SELECT  output

   FROM  TABLE  (  DBMS_WORKLOAD_REPOSITORY.AWR_DIFF_REPORT_HTML  (  dbid1      =>  1959014922  ,

                                                           inst_num1  =>  1  ,

                                                           bid1       =>  3212  ,

                                                           eid1       =>  3213  ,

                                                           dbid2      =>  2791053097  ,

                                                           inst_num2  =>  1  ,

                                                           bid2       =>  6414  ,

                                                           eid2       =>  6415  ));

spool  off

 

測試完成,刪除capture和replay

SQL> SELECT id, name FROM dba_workload_captures;

SQL> exec dbms_workload_capture.delete_capture_info(2);

SQL> select id, awr_begin_snap, awr_end_snap from dba_workload_replays;

SQL> exec DBMS_WORKLOAD_REPLAY.DELETE_REPLAY_INFO (1);


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

相關文章