暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

oracle 19c rat 回放测试-Oracle Real Application Testing

原创 四九年入国军 2024-11-20
402

    


   Oracle Real Application Testing(简称RAT)是11gR2的一个重要的feature,其推出的初衷是为了满足数据中心变更后,有很好的方法和工具去衡量这些变更对于生产环境的应用带来的影响,
更好地评估诸如硬件升级、软件升级、架构变化等等对于客户应用程序的影响。

   Real Application Testing其实有两个解决方法,分别是Database Replay和SPA(SQL Performance Analyzer)。。

   Database Replay,数据库回放顾名思义可以理解为一个录像机,通过在源系统上把实时应用产生的负载录制下来,并拿到变更后的环境进行播放,从而进行一个对比。
   数据库回放分为四个阶段完成:录制、预处理、回放、结果分析和报告。

--1、录制

1>目录准备

首先创建一个操作系统目录,用于存放录制的文件,如果是rac,需要一个共享的目录 mkdir /home/oracle/replay 在数据库内创建一个DIRECTORY: create directory replay as '/home/oracle/replay'; grant read,write on directory replay to public;

2>设置捕捉的条件

--过滤器中的内容是被包含还是排除,取决于capture是include还是exclude属性,如果是include,那么下面过滤器的内容将会被排除掉 --如果是exclude属性,那么过滤器中的才是我们需要捕捉的,除此之外都会被排除; exec dbms_workload_capture.ADD_FILTER(fname =>'filter_benchmarksql',fattribute => 'USER',fvalue => 'BENCHMARKSQL');

3>开启捕捉

BEGIN DBMS_WORKLOAD_CAPTURE.start_capture(name => 'DBREPLAY_20241118', dir => 'REPLAY', duration => NULL, DEFAULT_ACTION => 'EXCLUDE'); END; / ----name是本次捕捉任务的名称; ----dir是上面创建的directory; ----duration是捕捉时间,上面设置了7200,也就是捕捉2小时,该参数可以设置为NULL,就是无时间限制地录制,直到发起停止命令: exec DBMS_WORKLOAD_CAPTURE.finish_capture;

4>监控捕捉状态

set linesize 1000 col name for a20 col dir_path for a20 col status for a20 select id,name,status,start_time,end_time,connects,user_calls,dir_path from dba_workload_captures; --导出报告 set pagesize 0 long 30000000 longchunksize 1000 select dbms_workload_capture.report(11,'HTML') from dual; --11 是dba_workload_captures 的 id 列

--2、目标端装载数据

把现有环境数据导入到目标库 1>逻辑导出导入 2>提前搭建快照standby

--3、负载预处理

1>负载预处理

在回放负载之前,需要对负载进行预处理。 create directory replay2 as '/home/oracle/replay_adg'; grant read,write on directory replay to public; exec dbms_workload_replay.process_capture('REPLAY2');

2>初始化回放

exec dbms_workload_replay.initialize_replay('dbreplay2_20241119','REPLAY2'); ----第一个参数是捕捉任务的名称,第二个参数是文件存放的DIRECTORY --这里遇到问题提示已存在,用下面的命令删除: select id,name,status from dba_workload_replays; exec dbms_workload_replay.DELETE_REPLAY_INFO(1);

3>准备回放

exec dbms_workload_replay.prepare_replay(synchronization=>FALSE); --监控回放 set linesize 1000 col name for a20 col dir_path for a20 col status for a20 select id,name,status,start_time,end_time,connects,user_calls,dir_path from dba_workload_captures; 我们这里使用了默认的参数,如果需要加大或减少回放的压力,可以适当配置 connect_time_scale 和 think_time_scale 这两个参数,这两个参数默认的值是100(百分比),也就是1:1重放, 如果把connect_time_scale设置成50%,也就是两个连接的间隔时间缩短到原来的50%(10分钟的话就缩短到5分钟),从而加大数据库的压力。 例如: exec dbms_workload_replay.prepare_replay(synchronization=>FALSE, connect_time_scale=>50, think_time_scale=>50);

--4、重放

1>准备客户端

根据工作负载的强度大小,准备相应的客户端,可以使用wrc的评估模式来衡量大约需要多少客户端。 wrc mode=calibrate replaydir=/home/oracle/replay_adg Recommendation: Consider using at least 1 clients divided among 1 CPU(s) --建议最少1个并行 You will need at least 37 MB of memory per client process. If your machine(s) cannot match that number, consider using more clients. Workload Characteristics: - max concurrency: 10 sessions --最多10个并行 - total number of sessions: 11 由于这里需要10个,所以可以写一个脚本就在一台机for循环跑10个后台进程 for ((i=1;i<=10;i++)) do nohup wrc benchmarksql/oracle@192.168.13.102:1521/ora19c_dg1 mode=replay replaydir=/home/oracle/replay_adg > /home/oracle/wrc_log/wrc_$i.log & done

2>开始回放

exec dbms_workload_replay.start_replay; 当然,我们可以通过以下调用以下过程,控制回放作业: exec DBMS_WORKLOAD_REPLAY.PAUSE_REPLAY (); --暂停作业 exec DBMS_WORKLOAD_REPLAY.RESUME_REPLAY (); --继续作业 exec DBMS_WORKLOAD_REPLAY.CANCEL_REPLAY (); --取消作业 --查看状态 select id,name,status from dba_workload_replays; ID NAME STATUS ---------- -------------------- -------------------- 2 dbreplay2_20241119 CANCELLED 3 dbreplay2_20241119 CANCELLED 4 dbreplay2_20241119 CANCELLED 14 dbreplay2_20241119 COMPLETED

3>查看回放报告:

set pagesize 0 long 30000000 longchunksize 1000 select dbms_workload_replay.report(14,'HTML') from dual; 也可以导出测试过程中的AWR报告与源系统相同时间段的AWR报告比较。 --参考 Database Capture and Replay: Common Errors and Reasons (Doc ID 463263.1) Troubleshooting Slow Application Testing Replay (Doc ID 2043847.1) (wrc_main_12631.trc) ORA-15554: cannot start workload replay client because the database server is not in PREPARE mode --重新开始执行dbms_workload_replay.process_capture
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论