Oracle DB replay实践

打印 上一主题 下一主题

主题 833|帖子 833|积分 2499

第一部分 实行流程

1.1 Replay 流程

Database Replay实施的流程是workload_capture->workload preprocess->replay client prepare->replay->generate replay report,对于同一个capture可以进行多次replay
1.2 干系实行数据库

生产数据库:用于workload_capture,即负载捕捉
迁移数据库:用于workload_ preprocess和replay,即负载预处理和负载重放
Replay client:用于发起workload的客户端进程
第二部分 生产数据库

2.1 创建capture目录

必要确保目录下无任何文件(目录rac各节点都要建),目任命来存放capture数据
  1. mkdir -p /home/oracle/capdir
  2. create or replace directory capdir as '/home/oracle/capdir';
复制代码
2.2 创建过滤器(可选)

过滤器可以通过START_CAPTURE 过程的DEFAULT_ACTION 参数,参数值INCLUDE为排除过滤器或者EXCLUDE为包罗过滤器。
创建TPCC用户实行信息的过滤器:
  1. EXEC DBMS_WORKLOAD_CAPTURE.ADD_FILTER ('filter_user1', 'USER', 'TPCC');
复制代码
过滤器其他方式:
  1. exec dbms_workload_capture.ADD_FILTER( fname IN VARCHAR2, fattribute  IN
  2. VARCHAR2,fvalueIN VARCHAR2);
  3. fattribute:
  4. INSTANCE_NUMBER - type NUMBER
  5. USER - type STRING
  6. MODULE - type STRING
  7. ACTION - type STRING
  8. PROGRAM - type STRING
  9. SERVICE - type STRING
  10. PDB - type STRING
复制代码
  1. exec
  2. dbms_workload_capture.add_filter(fname=>'filter_prog1',fattribute=>'PROGRAM',fvalue=>'%OMS%');
  3. exec dbms_workload_capture.add_filter(fname=>'filter_prog2',fattribute=>'PROGRAM',fvalue=>'%emagent%');
复制代码
capture 全部的信息,可以跳过过滤器设置
查询过滤器
  1. select * from dba_workload_filters;
复制代码
删除过滤器
  1. exec DBMS_WORKLOAD_CAPTURE.DELETE_FILTER('filter_user1');
复制代码
2.3 运行Capture

10g数据库必要开启PRE_11G_ENABLE_CAPTURE
  1. alter system set PRE_11G_ENABLE_CAPTURE=true;
复制代码
函数:
  1. DBMS_WORKLOAD_CAPTURE.START_CAPTURE (
  2.    name              IN  VARCHAR2,
  3.    dir               IN  VARCHAR2,
  4.    duration          IN  NUMBER   DEFAULT NULL,
  5.    default_action    IN  VARCHAR2 DEFAULT 'INCLUDE',
  6.    auto_unrestrict   IN  BOOLEAN  DEFAULT TRUE,
  7.    capture_sts       IN  BOOLEAN  DEFAULT FALSE,
  8.    sts_cap_interval  IN  NUMBER   DEFAULT 300);
复制代码
  注意:过滤器默认是排除,假如必要包罗过滤器内容,default_action值必要设置为EXCLUDE。
  Duration单元为秒,设置为NULL时,则captureprocess 必须手工调用FINISH_CAPTURE 过程来竣事。
  1. BEGIN
  2.   DBMS_WORKLOAD_CAPTURE.start_capture (name     => 'test_capture_1',
  3.                                        dir      =>'CAPDIR',
  4.                                        default_action=>'EXCLUDE'
  5.                                        duration => NULL);
  6. END;
  7. /
复制代码
指定时间捕捉:
  1. BEGIN
  2. DBMS_WORKLOAD_CAPTURE.START_CAPTURE (
  3.    name              => 'test_capture_1',
  4.    dir               => 'CAPDIR',
  5.    duration          => 3600);
  6. END;
  7. /
复制代码
2.4 生产库业务进行

生产数据库运行阶段
2.5 停止capture

  1. BEGIN
  2. DBMS_WORKLOAD_CAPTURE.finish_capture;
  3. END;
  4. 若指定时间捕获,则可查看捕获状态是否完成,也可以手动进行停止捕获
  5. select id, name, status,dir_path from dba_workload_captures where id = (select max(id) from dba_workload_captures);
  6.         ID NAME             STATUS          DIR_PATH
  7. ----- ---------------- --------------- -------------------------
  8.          2 test_capture_1   COMPLETED       /home/oracle/capdir
复制代码
2.6 捕捉生成文件
capture捕捉生成的文件如下:
  1. total 18252
  2. -rw-r--r--. 1 oracle oinstall 9294509 Feb 25 11:06 wcr_5wp4fn4002vhm.rec
  3. -rw-r--r--. 1 oracle oinstall 9308639 Feb 25 11:06 wcr_5wp4fnc002vhp.rec
  4. -rw-r--r--. 1 oracle oinstall    6495 Feb 25 11:06 wcr_5wp4fnn002vhr.rec
  5. -rw-r--r--. 1 oracle oinstall    1239 Feb 25 11:06 wcr_5wp4g8w002v4q.rec
  6. -rw-r--r--. 1 oracle oinstall   40590 Feb 25 11:06 wcr_cr.html
  7. -rw-r--r--. 1 oracle oinstall   20386 Feb 25 11:06 wcr_cr.text
  8. -rw-r--r--. 1 oracle oinstall     168 Feb 25 11:06 wcr_fcapture.wmd
  9. -rw-r--r--. 1 oracle oinstall      98 Feb 25 11:03 wcr_scapture.wmd
复制代码
2.8 导出awr报告

  1. exec dbms_workload_capture.export_awr (capture_id => 2);
复制代码
导出的awr报告可以导入到目的库上,用来做对比,生成compare period report必要。
  1. $ ls -l
  2. total 25656
  3. -rw-r--r--. 1 oracle oinstall 9294509 Feb 25 11:06 wcr_5wp4fn4002vhm.rec
  4. -rw-r--r--. 1 oracle oinstall 9308639 Feb 25 11:06 wcr_5wp4fnc002vhp.rec
  5. -rw-r--r--. 1 oracle oinstall    6495 Feb 25 11:06 wcr_5wp4fnn002vhr.rec
  6. -rw-r--r--. 1 oracle oinstall    1239 Feb 25 11:06 wcr_5wp4g8w002v4q.rec
  7. -rw-r-----. 1 oracle oinstall 7565312 Feb 25 11:17 wcr_ca.dmp
  8. -rw-r--r--. 1 oracle oinstall   10926 Feb 25 11:17 wcr_ca.log
  9. -rw-r--r--. 1 oracle oinstall   40590 Feb 25 11:06 wcr_cr.html
  10. -rw-r--r--. 1 oracle oinstall   20386 Feb 25 11:06 wcr_cr.text
  11. -rw-r--r--. 1 oracle oinstall     168 Feb 25 11:06 wcr_fcapture.wmd
  12. -rw-r--r--. 1 oracle oinstall      98 Feb 25 11:03 wcr_scapture.wmd
复制代码
2.9 查询dba_workload_captures

可以获取到capture ID和capture的snap信息
  1. SQL> select id,AWR_BEGIN_SNAP,AWR_END_SNAP from dba_workload_captures;
  2.          2             10           11
复制代码
第三部分 目的数据库

3.1 创建directory

上传到目的服务器(RAC各节点目录下数据都要传输)
  1. scp -r /home/oracle/capdir/* 192.168.199.1:/home/oracle/replay/
复制代码
创建directory
  1. mkdir -p /home/oracle/replay
  2. CREATE OR REPLACE DIRECTORY db_replay_capture_dir AS '/home/oracle/replay';
复制代码
3.2 创建过滤器

创建方式:
  1. exec DBMS_WORKLOAD_REPLAY.ADD_FILTER (fname IN VARCHAR2,fattribute IN
  2. VARCHAR2,fvalue IN VARCHAR2);
复制代码
fattribute可以利用如下:
• USER
• MODULE
• ACTION
• PROGRAM
• SERVICE
• CONNECTION_STRING
按用户创建
  1. exec DBMS_WORKLOAD_REPLAY.ADD_FILTER ('replay_filter1','USER','TPCC');
复制代码
创建了过滤器,该部分内容实行将被过滤掉,不实行。
3.3 加载capture日志

利用PROCESS_CAPTURE过程来准备capture logs。
  1. 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等文件。
  1. [oracle@oracle11g pp11.2.0.4.0]$ pwd
  2. /home/oracle/replay/pp11.2.0.4.0
  3. [oracle@oracle11g pp11.2.0.4.0]$ ls -l
  4. total 1600
  5. -rw-r--r--. 1 oracle oinstall   3522 Feb 25 13:14 wcr_calibrate.xml
  6. -rw-r-----. 1 oracle oinstall  12288 Feb 25 13:14 wcr_commits.extb
  7. -rw-r-----. 1 oracle oinstall  12288 Feb 25 13:14 wcr_conn_data.extb
  8. -rw-r-----. 1 oracle oinstall  12288 Feb 25 13:14 wcr_data.extb
  9. -rw-r-----. 1 oracle oinstall 757760 Feb 25 13:14 wcr_dep_graph.extb
  10. -rw-r--r--. 1 oracle oinstall    290 Feb 25 13:14 wcr_login.pp
  11. -rw-r--r--. 1 oracle oinstall     35 Feb 25 13:14 wcr_process.wmd
  12. -rw-r-----. 1 oracle oinstall  12288 Feb 25 13:14 wcr_references.extb
  13. -rw-r-----. 1 oracle oinstall 806912 Feb 25 13:14 wcr_scn_order.extb
  14. -rw-r-----. 1 oracle oinstall  12288 Feb 25 13:14 wcr_seq_data.extb
复制代码
3.4初始化replay

利用Initializing replay 装载metadata到tables里:
  1. EXEC DBMS_WORKLOAD_REPLAY.initialize_replay (replay_name => 'replay',  replay_dir  => 'DB_REPLAY_CAPTURE_DIR');
复制代码
将数据改成PREPARE REPLAY 模式:
  1. exec DBMS_WORKLOAD_REPLAY.PREPARE_REPLAY();
复制代码
默认synchronization参数TRUE,按commit数据的序次在数据库里重新实行一遍sql。
假如设置为False,不按commit序次实行,跟现实会有数据分歧。
  1. exec DBMS_WORKLOAD_REPLAY.prepare_replay (synchronization => FALSE);
复制代码
检查replay的状态:
  1. SQL> col name for a20
  2. SQL> col status for a20
  3. SQL> select name,status from  dba_workload_replays;
  4. NAME            STATUS
  5. --------------- ----------------------------------------
  6. replay          PREPARE
复制代码
3.5启动重放客户端

评估客户端需求
wrc MODE=calibrate REPLAYDIR= =/home/oracle/replay
  1. $ wrc system/oracle mode=replay replaydir=/home/oracle/replay
  2. Workload Replay Client: Release 11.2.0.4.0 - Production on Tue Feb 25 13:29:23 2020
  3. Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.
  4. Wait for the replay to start (13:29:23)--等候replay执行
  5. Replay client 1 started (13:30:46)
  6. Replay client 1 finished (13:34:39--完成replay执行
复制代码
实行之后,replay client 被停息,并等候start replay 。
3.6实行replay

实行时间跟生产库获取的时间有关
  1. SQL> exec DBMS_WORKLOAD_REPLAY.START_REPLAY;
  2. PL/SQL procedure successfully completed.
  3. SQL> select id, name, status from dba_workload_replays;
  4.         ID NAME            STATUS
  5. ---------- --------------- ----------------------------------------
  6.          11 replay          COMPLETED
复制代码
初始状态:PREPARE
实行状态:IN PROGRESS
完成状态:COMPLETED
3.7手动停止replay

假如盼望在完成replay 前stop replay过程,调用CANCEL_REPLAY 过程即可。
SQL> exec DBMS_WORKLOAD_REPLAY.CANCEL_REPLAY ();
3.8获取replay报告

  1. 先获取replay_id:
  2. select id, name, status from dba_workload_replays;
  3. 获取replay报告:
  4. SQL> set pagesize 0 long 30000000 longchunksize 2000
  5. SQL> spool /home/oracle/replay_report.html
  6. SQL> select dbms_workload_replay.report(replay_id => 11,format => 'HTML') from dual;
  7. SQL> spool off
复制代码
3.9导入capture awr数据

导入Capture AWR data 到目的数据库,可以与replay AWR data做比力,参见3.13.1生成awr比力报告
  1. set serveroutput on
  2. declare
  3.         capid number := 0;
  4.         BEGIN
  5.         capid := DBMS_WORKLOAD_CAPTURE.GET_CAPTURE_INFO(dir         =>'DB_REPLAY_CAPTURE_DIR');
  6.         dbms_output.put_line('capid is ' || capid);
  7.    END;
  8.    /
  9. capid is 2(capture ID)
复制代码
上面获取的为capture ID,通过capture ID可以获取掉awr导入到目的库后的dbid,查询如下:
–查询出导入awr的dbid
  1. SQL> select dbms_workload_capture.import_awr(capture_id => 2, staging_schema => 'SYSTEM') from dual;
  2. 892927038
复制代码
–查询出导入awr的snap id
  1. SQL> select snap_id,dbid,begin_interval_time,end_interval_time from dba_hist_snapshot where dbid=892927038;
复制代码
3.10获取capture信息

  1. SQL> select id, awr_begin_snap, awr_end_snap from dba_workload_captures;
  2.          2              10            11
复制代码
3.11获取replay信息

  1. SQL> select id, awr_begin_snap, awr_end_snap from dba_workload_replays;
  2.          11            149          150
复制代码
3.12比力capture和replay

  1. set serveroutput on
  2. spool /home/oracle/compare_period_report.html
  3. declare
  4. v_rlt clob;
  5. v_replay_id1 number:=2;
  6. v_replay_id2 number:= null;
  7. v_snum number:=1;
  8. v_length number;
  9. v_char varchar2(32767);
  10. begin
  11. dbms_workload_replay.compare_period_report(replay_id1=>v_replay_id1,
  12. replay_id2=>v_replay_id2,format=>'HTML',result=>v_rlt);
  13. v_length:=dbms_lob.GETLENGTH(v_rlt);
  14. while ( v_snum < v_length ) loop
  15. v_char:=dbms_lob.substr(lob_loc=>v_rlt,amount=>32767,offset=>v_snum);
  16. v_snum:=v_snum+32767;
  17. dbms_output.put_line(v_char);
  18. end loop;
  19. end;
  20. /
  21. spool off
复制代码
3.12.1数据库信息比力


3.12.2变化信息


3.12.3Top Sql变化


3.12.4硬件信息比力


3.12.5运行时间对比信息






3.13 awr性能比力报告

3.13.1生成awr比力报告

通过当前实例的awr和导入capture awr数据,获取dbid和snap id,生成awr比力报告。
  1. set pagesize 0 long 30000000 longchunksize 2000 heading off
  2. spool /home/oracle/awrdiff.html
  3. SELECT output FROM TABLE(DBMS_WORKLOAD_REPOSITORY.AWR_DIFF_REPORT_HTML(
  4.    dbid1     => 812624484,
  5.    inst_num1 => 1,
  6.    bid1      => 10,
  7.    eid1      => 11,
  8.    dbid2     => 1560552774,
  9.    inst_num2 => 1,
  10.    bid2      => 149,
  11.    eid2      => 150));
  12. spool off
复制代码
3.13.2主机配置比力


3.13.3数据库内存配置


3.13.4 Load Profile


3.13.5 Top事件


3.13.6 Time Model


3.13.7 Wait Classes


3.13.8 Sql比力






3.14测试完成,删除capture和replay

查询ID,并删除
  1. SQL> select id, awr_begin_snap, awr_end_snap from dba_workload_replays;
  2.         ID AWR_BEGIN_SNAP AWR_END_SNAP
  3. ---------- -------------- ------------
  4.          2            144          145
  5.         11            149          150
  6. SQL> exec DBMS_WORKLOAD_REPLAY.DELETE_REPLAY_INFO (1);
  7. PL/SQL procedure successfully completed.
  8. SQL> exec DBMS_WORKLOAD_REPLAY.DELETE_REPLAY_INFO (11);
  9. PL/SQL procedure successfully completed.
复制代码
第四部分 总结

步骤略多,盼望对你有资助


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

万万哇

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表