在Oracle11g中有一个新功能,称为Real Application Testing,直接的竞争对手是HP/Mercury的Load Runner,用于系统测试,在正式的产品环境中通过Capture抓取实际的Load,然后在测试环境中Replay,这样来测试新环境的性能。
现在Real Application Testing的部分功能通过打patch的方式在更早的Oracle版本中也可以使用了,这些版本包括Oracle9i和Oracle10g。在10.2.0.4 Patchset中已经包含了这部分功能,因此如果你已经将数据库升级到10.2.0.4,那么不再需要安装额外的oneoff patch,否则则需要去下载一个单独的patch包(详细的文档参看Metalink Note:560977.1)。
为什么要让老版本的数据库也支持Real Application Testing呢?Oracle的想法很简单,因为Oracle希望客户将自己的数据库都尽快升级到11g,那么对于客户来说一个很大的顾虑就是,我现在的9i或者10g数据库上跑的很正常的应用到了11g上是不是会出现大的性能问题呢?怎样才能完善地测试呢?
所以Oracle将Real Application Testing中的Workload Capture功能加入到了9i和10g数据库里,但是,没有把Workload Replay的功能加入,用脚想也知道会这样了,Workload Capture可以把老版本的生产库中的压力抓出来,但是,你只能到11g的数据库中去重新播放来观察效果。
体现到数据库对象上,就是在9i和10g库中只会存在DBMS_WORKLOAD_CAPTURE这个包,而没有DBMS_WORKLOAD_REPLAY包。
抓取Workload很简单。
alter system set pre_11g_enable_capture=true;
–先创建一个filter,只抓取指定用户的workload
BEGIN
DBMS_WORKLOAD_CAPTURE.ADD_FILTER (
fname => ‘USER_KAMUS’,
fattribute => ‘USER’,
fvalue => ‘KAMUS’);
END;
/
–开始抓取,持续时间1分钟,其中TMP_DIR是一个Directory,需要先用create directory来创建
BEGIN
DBMS_WORKLOAD_CAPTURE.START_CAPTURE (name => ‘kamus_test_capture’,
dir => ‘TMP_DIR’,
duration => 60);
END;
/
–将被抓取的这段时间内的AWR数据也导出来,用以之后的AWR Report compare
BEGIN
DBMS_WORKLOAD_CAPTURE.EXPORT_AWR (capture_id => 1);
END;
/
之后会在TMP_DIR指向的目录中生成一系列的文件,把这些文件传输到11g的机器上,然后就可以开始Process以及Replay了。
RAT和LoadRunner确实有竞争关系,不过各有所长:LR的适用范围更广,RAT在针对oracle的应用上有不可替代的优势。而且效率更高,我曾看到过一个Oracle官方的比较,同样一个任务,用:DB Replay: 2 weeks,而用LoadRunner: 30 weeks
另外,oracle收购了Empirix的e-load, e-tester之后,就又多了一个跟LR竞争的产品了,参考下面我这个帖子:
http://www.rickyzhu.com/451_oracle-get-etestsuite.html
AQM里面的功能测试套件就是从Empirix的e-load, e-tester来的吧