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: