第一部分 实行流程
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数据
- mkdir -p /home/oracle/capdir
- create or replace directory capdir as '/home/oracle/capdir';
复制代码 2.2 创建过滤器(可选)
过滤器可以通过START_CAPTURE 过程的DEFAULT_ACTION 参数,参数值INCLUDE为排除过滤器或者EXCLUDE为包罗过滤器。
创建TPCC用户实行信息的过滤器:
- EXEC DBMS_WORKLOAD_CAPTURE.ADD_FILTER ('filter_user1', 'USER', 'TPCC');
复制代码 过滤器其他方式:
- exec dbms_workload_capture.ADD_FILTER( fname IN VARCHAR2, fattribute IN
- VARCHAR2,fvalueIN VARCHAR2);
- fattribute:
- INSTANCE_NUMBER - type NUMBER
- USER - type STRING
- MODULE - type STRING
- ACTION - type STRING
- PROGRAM - type STRING
- SERVICE - type STRING
- PDB - type STRING
复制代码- exec
- dbms_workload_capture.add_filter(fname=>'filter_prog1',fattribute=>'PROGRAM',fvalue=>'%OMS%');
- exec dbms_workload_capture.add_filter(fname=>'filter_prog2',fattribute=>'PROGRAM',fvalue=>'%emagent%');
复制代码 capture 全部的信息,可以跳过过滤器设置
查询过滤器
- select * from dba_workload_filters;
复制代码 删除过滤器
- exec DBMS_WORKLOAD_CAPTURE.DELETE_FILTER('filter_user1');
复制代码 2.3 运行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);
复制代码 注意:过滤器默认是排除,假如必要包罗过滤器内容,default_action值必要设置为EXCLUDE。
Duration单元为秒,设置为NULL时,则captureprocess 必须手工调用FINISH_CAPTURE 过程来竣事。
- BEGIN
- DBMS_WORKLOAD_CAPTURE.start_capture (name => 'test_capture_1',
- dir =>'CAPDIR',
- default_action=>'EXCLUDE'
- duration => NULL);
- END;
- /
复制代码 指定时间捕捉:
- BEGIN
- DBMS_WORKLOAD_CAPTURE.START_CAPTURE (
- name => 'test_capture_1',
- dir => 'CAPDIR',
- duration => 3600);
- END;
- /
复制代码 2.4 生产库业务进行
生产数据库运行阶段
2.5 停止capture
- BEGIN
- DBMS_WORKLOAD_CAPTURE.finish_capture;
- END;
- 若指定时间捕获,则可查看捕获状态是否完成,也可以手动进行停止捕获
- select id, name, status,dir_path from dba_workload_captures where id = (select max(id) from dba_workload_captures);
- ID NAME STATUS DIR_PATH
- ----- ---------------- --------------- -------------------------
- 2 test_capture_1 COMPLETED /home/oracle/capdir
复制代码 2.6 捕捉生成文件
capture捕捉生成的文件如下:
- total 18252
- -rw-r--r--. 1 oracle oinstall 9294509 Feb 25 11:06 wcr_5wp4fn4002vhm.rec
- -rw-r--r--. 1 oracle oinstall 9308639 Feb 25 11:06 wcr_5wp4fnc002vhp.rec
- -rw-r--r--. 1 oracle oinstall 6495 Feb 25 11:06 wcr_5wp4fnn002vhr.rec
- -rw-r--r--. 1 oracle oinstall 1239 Feb 25 11:06 wcr_5wp4g8w002v4q.rec
- -rw-r--r--. 1 oracle oinstall 40590 Feb 25 11:06 wcr_cr.html
- -rw-r--r--. 1 oracle oinstall 20386 Feb 25 11:06 wcr_cr.text
- -rw-r--r--. 1 oracle oinstall 168 Feb 25 11:06 wcr_fcapture.wmd
- -rw-r--r--. 1 oracle oinstall 98 Feb 25 11:03 wcr_scapture.wmd
复制代码 2.8 导出awr报告
- exec dbms_workload_capture.export_awr (capture_id => 2);
复制代码 导出的awr报告可以导入到目的库上,用来做对比,生成compare period report必要。
- $ ls -l
- total 25656
- -rw-r--r--. 1 oracle oinstall 9294509 Feb 25 11:06 wcr_5wp4fn4002vhm.rec
- -rw-r--r--. 1 oracle oinstall 9308639 Feb 25 11:06 wcr_5wp4fnc002vhp.rec
- -rw-r--r--. 1 oracle oinstall 6495 Feb 25 11:06 wcr_5wp4fnn002vhr.rec
- -rw-r--r--. 1 oracle oinstall 1239 Feb 25 11:06 wcr_5wp4g8w002v4q.rec
- -rw-r-----. 1 oracle oinstall 7565312 Feb 25 11:17 wcr_ca.dmp
- -rw-r--r--. 1 oracle oinstall 10926 Feb 25 11:17 wcr_ca.log
- -rw-r--r--. 1 oracle oinstall 40590 Feb 25 11:06 wcr_cr.html
- -rw-r--r--. 1 oracle oinstall 20386 Feb 25 11:06 wcr_cr.text
- -rw-r--r--. 1 oracle oinstall 168 Feb 25 11:06 wcr_fcapture.wmd
- -rw-r--r--. 1 oracle oinstall 98 Feb 25 11:03 wcr_scapture.wmd
复制代码 2.9 查询dba_workload_captures
可以获取到capture ID和capture的snap信息
- SQL> select id,AWR_BEGIN_SNAP,AWR_END_SNAP from dba_workload_captures;
- 2 10 11
复制代码 第三部分 目的数据库
3.1 创建directory
上传到目的服务器(RAC各节点目录下数据都要传输)
- scp -r /home/oracle/capdir/* 192.168.199.1:/home/oracle/replay/
复制代码 创建directory
- mkdir -p /home/oracle/replay
- CREATE OR REPLACE DIRECTORY db_replay_capture_dir AS '/home/oracle/replay';
复制代码 3.2 创建过滤器
创建方式:
- exec DBMS_WORKLOAD_REPLAY.ADD_FILTER (fname IN VARCHAR2,fattribute IN
- VARCHAR2,fvalue IN VARCHAR2);
复制代码 fattribute可以利用如下:
• USER
• MODULE
• ACTION
• PROGRAM
• SERVICE
• CONNECTION_STRING
按用户创建
- exec DBMS_WORKLOAD_REPLAY.ADD_FILTER ('replay_filter1','USER','TPCC');
复制代码 创建了过滤器,该部分内容实行将被过滤掉,不实行。
3.3 加载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等文件。
- [oracle@oracle11g pp11.2.0.4.0]$ pwd
- /home/oracle/replay/pp11.2.0.4.0
- [oracle@oracle11g pp11.2.0.4.0]$ ls -l
- total 1600
- -rw-r--r--. 1 oracle oinstall 3522 Feb 25 13:14 wcr_calibrate.xml
- -rw-r-----. 1 oracle oinstall 12288 Feb 25 13:14 wcr_commits.extb
- -rw-r-----. 1 oracle oinstall 12288 Feb 25 13:14 wcr_conn_data.extb
- -rw-r-----. 1 oracle oinstall 12288 Feb 25 13:14 wcr_data.extb
- -rw-r-----. 1 oracle oinstall 757760 Feb 25 13:14 wcr_dep_graph.extb
- -rw-r--r--. 1 oracle oinstall 290 Feb 25 13:14 wcr_login.pp
- -rw-r--r--. 1 oracle oinstall 35 Feb 25 13:14 wcr_process.wmd
- -rw-r-----. 1 oracle oinstall 12288 Feb 25 13:14 wcr_references.extb
- -rw-r-----. 1 oracle oinstall 806912 Feb 25 13:14 wcr_scn_order.extb
- -rw-r-----. 1 oracle oinstall 12288 Feb 25 13:14 wcr_seq_data.extb
复制代码 3.4初始化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,按commit数据的序次在数据库里重新实行一遍sql。
假如设置为False,不按commit序次实行,跟现实会有数据分歧。
- exec DBMS_WORKLOAD_REPLAY.prepare_replay (synchronization => FALSE);
复制代码 检查replay的状态:
- SQL> col name for a20
- SQL> col status for a20
- SQL> select name,status from dba_workload_replays;
- NAME STATUS
- --------------- ----------------------------------------
- replay PREPARE
复制代码 3.5启动重放客户端
评估客户端需求
wrc MODE=calibrate REPLAYDIR= =/home/oracle/replay
- $ wrc system/oracle mode=replay replaydir=/home/oracle/replay
- Workload Replay Client: Release 11.2.0.4.0 - Production on Tue Feb 25 13:29:23 2020
- Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
- Wait for the replay to start (13:29:23)--等候replay执行
- Replay client 1 started (13:30:46)
- Replay client 1 finished (13:34:39--完成replay执行
复制代码 实行之后,replay client 被停息,并等候start replay 。
3.6实行replay
实行时间跟生产库获取的时间有关
- SQL> exec DBMS_WORKLOAD_REPLAY.START_REPLAY;
- PL/SQL procedure successfully completed.
- SQL> select id, name, status from dba_workload_replays;
- ID NAME STATUS
- ---------- --------------- ----------------------------------------
- 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报告
- 先获取replay_id:
- select id, name, status from dba_workload_replays;
- 获取replay报告:
- SQL> set pagesize 0 long 30000000 longchunksize 2000
- SQL> spool /home/oracle/replay_report.html
- SQL> select dbms_workload_replay.report(replay_id => 11,format => 'HTML') from dual;
- SQL> spool off
复制代码 3.9导入capture awr数据
导入Capture AWR data 到目的数据库,可以与replay AWR data做比力,参见3.13.1生成awr比力报告
- 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;
- /
- capid is 2(capture ID)
复制代码 上面获取的为capture ID,通过capture ID可以获取掉awr导入到目的库后的dbid,查询如下:
–查询出导入awr的dbid
- SQL> select dbms_workload_capture.import_awr(capture_id => 2, staging_schema => 'SYSTEM') from dual;
- 892927038
复制代码 –查询出导入awr的snap id
- SQL> select snap_id,dbid,begin_interval_time,end_interval_time from dba_hist_snapshot where dbid=892927038;
复制代码 3.10获取capture信息
- SQL> select id, awr_begin_snap, awr_end_snap from dba_workload_captures;
- 2 10 11
复制代码 3.11获取replay信息
- SQL> select id, awr_begin_snap, awr_end_snap from dba_workload_replays;
- 11 149 150
复制代码 3.12比力capture和replay
- set serveroutput on
- spool /home/oracle/compare_period_report.html
- declare
- v_rlt clob;
- v_replay_id1 number:=2;
- 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;
- /
- 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比力报告。
- set pagesize 0 long 30000000 longchunksize 2000 heading off
- spool /home/oracle/awrdiff.html
- SELECT output FROM TABLE(DBMS_WORKLOAD_REPOSITORY.AWR_DIFF_REPORT_HTML(
- dbid1 => 812624484,
- inst_num1 => 1,
- bid1 => 10,
- eid1 => 11,
- dbid2 => 1560552774,
- inst_num2 => 1,
- bid2 => 149,
- eid2 => 150));
- 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,并删除
- SQL> select id, awr_begin_snap, awr_end_snap from dba_workload_replays;
- ID AWR_BEGIN_SNAP AWR_END_SNAP
- ---------- -------------- ------------
- 2 144 145
- 11 149 150
- SQL> exec DBMS_WORKLOAD_REPLAY.DELETE_REPLAY_INFO (1);
- PL/SQL procedure successfully completed.
- SQL> exec DBMS_WORKLOAD_REPLAY.DELETE_REPLAY_INFO (11);
- PL/SQL procedure successfully completed.
复制代码 第四部分 总结
步骤略多,盼望对你有资助
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |