Chinaunix首页 | 论坛 | 博客
  • 博客访问: 554652
  • 博文数量: 855
  • 博客积分: 40000
  • 博客等级: 大将
  • 技术积分: 5005
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-16 19:08
文章分类

全部博文(855)

文章存档

2011年(1)

2008年(854)

我的朋友

分类:

2008-10-16 19:10:00

    数据库11gR1新的数据库重放(DBR)功能允许 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

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

[1]    

【责编:Chuan】

--------------------next---------------------

阅读(262) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~