Oracle 11g数据库重放教程(三):复杂任务的负载重放全程讲解(1)

日期: 2008-07-24 作者:黄永兵 来源:TechTarget中国 英文

  Oracle数据库11gR1新的数据库重放(DBR)功能允许Oracle DBA从一个Oracle 10gR2环境捕获负载,然后在Oracle 11gR1环境中重放这个负载,以分析如何将现有数据库迁移到新版本,并分析对系统整体性能的影响。这是本系列最后一篇文章,将描述如何使用这些特性从现有的Oracle 10gR2单实例数据库环境捕获并预处理负载,然后在一个Oracle 11gR1 RAC测试环境中重放同样的负载。这给Oracle DBA提供了一个史无前例的机会标识出在迁移到RAC环境时任何潜在的性能瓶颈。


  前面的文章描写的是一个相对简单的场景:如何在当前运行Oracle 11g生产环境中(p+0)捕获一个模拟的应用程序负载,然后在相同的p+1环境重放,这篇文章处理稍微更有难度一点的任务,因为:


  从一个单实例Oracle 10gR2数据库捕获和记录应用程序负载,包括对应的自动工作负载信息库(AWR)数据。


  将模拟负载转移到Oracle 11gR1 RAC测试环境。


  预处理负载,包括重新映射到不同负载均衡服务的连接。


  在Oracle 11gR1 RAC测试环境中重放负载。


  标识应用程序性能问题,数据分歧和错误分歧。


  我将使用Oracle 11gR1提供的PL/SQL包DBMS_WORKLOAD_CAPTURE和DBMS_WORKLOAD_REPLAY来完整这些任务。


  第一阶段:录制一个单实例环境下的负载


  为了使捕获和重放情景简单 — 同时因为我痛恨浪费任何有用的东西 — 我将使用前面文章中使用的PL/SQL对象来完成在单实例Oracle 10gR2上的负载捕获,因为捕获负载要求最低的Oracle10gR2版本是10.2.0.4,首先我使用数据库升级助手(DBUA)将现有数据库(名叫DB10G)升级到10.2.0.4,在我的Oracle 10gR2生产环境中花了30分钟来升级,中间很顺利。


  然后我执行同样的脚本和PL/SQL代码创建并启动一个合适的环境用于捕获负载。(具体脚本和代码请参考本系列前面的文章)
准备捕获负载:现在我们的源数据库环境已经就绪了,我将启动一个真实的负载捕获,Listing 3.1(见附件)显示了我如何使用存储过程DBMS_WORKLOAD_CAPTURE.ADD_FILTER应用一些过滤器来排除那些产生“不感兴趣”活动的用户会话以及在捕获过程中可以忽略的会话,在本例中,我比想捕获EM控制台自身的活动。


  开始捕获:Listing 3.2(见附件)显示了我是如何使用存储过程DBMS_WORKLOAD_CAPTURE.START_CAPTURE启动负载捕获的,这个存储过程首先检查目标目录(DBRCONTROL)中是否有以前执行负载捕获的文件,如果有,它会返回一个错误,并且不允许捕获继续,然而,只要捕获启动成功,DB10G数据库的警报日志将会识别出一个DBR捕获操作正在进行:







. . .
Mon Jun 23 19:40:41 2008
alter SYSTEM SET pre_11g_enable_capture=TRUE SCOPE=BOTH;
Mon Jun 23 19:40:44 2008
DBMS_WORKLOAD_CAPTURE.START_CAPTURE(): Starting
database capture at 06/23/2008 19:40:44
. . . 


  因为我正在一个Oracle 10gR2数据库上捕获,在开始捕获前,我将动态初始化参数PRE_11G_ENABLE_CAPTURE设置为TRUE。
生成负载:为了模拟不同用户相似代码的并行执行,我准备一个shell脚本(10gSI_RandomLoadGenerator.sh),它与本系列前面文章中的shell脚本类似,它启动大约80个用户会话随机执行一些简单的CPU密集型计算的查询,在AP方案上生成复杂的查询,执行往AP方案表中插入几千行数据的DML操作。


  同时,我将DB10G数据库配置为只使用一个服务名(DB10G),不考虑操作的类型,并且在我的TNSNAMES.ORA配置文件中添加了这个服务名。(在后面的步骤中,在Oracle 11gR1 RAC环境中我将描述如何使用DBMS_WORKLOAD_REPLAY.REMAP_CONNECTION重新映射这个连接到不同的服务名)
暂停负载捕获:为了暂停捕获,我执行存储过程DBMS_WORKLOAD_CAPTURE.FINISH_CAPTURE停止负载捕获操作(参考Listing 3.3,见附件),注意DBR捕获成功的结论也会记录在数据库DB10G的警报日志中: 







. . .
Mon Jun 23 19:42:21 2008
Thread 1 advanced to log sequence 43 (LGWR switch)
Current log# 3 seq# 43 mem# 0: /u01/app/oracle/
oradata/db10g/redo03.log
Mon Jun 23 19:44:35 2008
DBMS_WORKLOAD_CAPTURE.FINISH_CAPTURE(): Stopped database
capture successfully at 06/23/2008 19:44:32


   . . .Mon Jun 23 19:42:21 2008Thread 1 advanced to log sequence 43 (LGWR switch)Current log# 3 seq# 43 mem# 0: /u01/app/oracle/oradata/db10g/redo03.logMon Jun 23 19:44:35 2008DBMS_WORKLOAD_CAPTURE.FINISH_CAPTURE(): Stopped database capture successfully at 06/23/2008 19:44:32


  查看捕获结果:为了查看负载捕获真实的结果,我执行存储过程DBMS_WORKLOAD_CAPTURE.REPORT生成一个摘要报告(参考Listing 3.4,见附件),这个报告的输出文本格式请查看Report 3.1(见附件)或HTML格式(http://www.databasejournal.com/img/2008/06/DB10G_WorkloadCaptureReport.html)。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

相关推荐