分享

Oracle的数据库重放步骤

 白月光没有悲伤 2012-05-09
Oracle的数据库重放步骤
        很多DBA都有这样的困惑,那就是在生产系统上出现的数据库性能问题在备份系统上无法重现,不能再生产系统上尝试解决方案,而备份系统上的数据库访问量又很小,无法模拟生产系统的工作状态。
         Oracle11g提供的数据库重放(DBR)功能正好可以解决这个问题。它可以捕获应用程序的负载,并通过在环境中重放负载分析应用程序的设计对数据库性能的影响。
         Oracle DBA很早就盼望能够在生产环境中捕获应用程序的负载,然后通过在测试环境中重放捕获的负载来判断数据库或应用程序的改动对数据库性能的影响,Oracle 11g数据库新的数据库重放特性使DBA可以捕获,处理负载,然后有选择性地或跨大范围的数据库环境和平台全部重放,本文为在日益不稳定的数据库环境中使用Oracle 11g数据库重放有效地快速预报应用程序的改变对性能的影响提供一个入门。

   如果我在IT行业这几年教会了我一切,那它是继墨菲定律(凡事只要有可能出错,那就一定会出错)之后的又一真理了,过去的几年里,我认识到了多个墨菲定律推论的正确性,包括“替代的零件往往不能代用”及特别是“墨菲实际上是一个乐观主义者”的回答,我希望有一天我自己的推论也能通过长期的观察被添加到这些严格的定律中,我的推论就是:“没有东西能够象在测试环境那样在生产环境中运转”。

   Oracle DBA面临一个严峻的挑战:如何准确预报下一组对数据库或应用程序,甚至是硬件配置的改动对整个数据库环境产生的负面影响。这里所说的整个环境字面上的意思是:任何应用程序运行时执行的每一条SQL语句,不管它仅仅是一个简单的查询语句还是包括大量DML语句的批处理作业,都必须捕获。这个挑战目前变得更加尖锐,因为当前的应用程序负载大都是跨多个技术产生的:N层应用程序服务器、web farms、甚至传统的客户端/服务器模式应用程序。况且,当某个应用程序执行速度慢下来时,要跟踪追捕检查性能下降的根本原因几乎不可能的。它可能是因不正确的网络配置、不正确的应用程序服务器配置、甚至可能是因为应用程序客户端环境变量设置不正确引起的。

   目前实现这个艰巨的目标唯一的选择是“捕获/重放”应用程序负载产品套件,这类应用程序是专门设计用于捕获当前生产环境数据库已经执行过的完整负载(p+0),然后重放该负载(p+1)。然而,以我多年的经验看来,这意味着公司要尽早购买第三方较昂贵的解决方案(如HP的LoadRunner工具)。软件的许可成本和服务器的配置成本需要集中精力考虑,特别是人力资源配置的考虑,可能在捕获/重放负载开始之前很容易就会达到六位数美金的投入了。这就是为什么许多IT机构放弃了这个想法,因为测试应用程序性能倒退的成本因素使其变得不太可能。

   性能倒退之外的因素

   我之前写的关于Oracle 11g新的SQL语句性能调试特性:SQL性能分析器(SPA)和SQL计划管理器(SPM)已经讨论过Oracle 11g是如何让DBA定位因应用程序环境改变引起的性能提升、保持原样、性能倒退的SQL语句的,所有捕获/重放工具都必须要能捕获并能比较源(p+0)和未来(p+1)系统、应用程序、数据库性能统计,特别是当前性能较低的SQL语句。但这里我还要提出另外两个需要标记的回归类型:错误回归:在重放捕获的负载时,常常会遇到错误,事实上这个错误几乎就是一个想要的结果,例如:我想校验一个预期中的异常,如违背引用完整性(如主键、外键、唯一键、CHECK、NOT NULL约束)出现时能被正确地捕获,同时,我还希望有违背重要的事务规则的情况出现能被捕获到,如在检查职员工资单时发现基本工资与总工资扣除所有费用后不平衡的情况,我希望这种异常能被当作错误一样被捕获到。

   因此,任何强大的捕获/重放工具都必须能够监视下面三种类型的错误回归:

   所有预期的错误都发生了吗?

   有不是预期的错误状态出现吗?很显然,这表明严格的因系统或应用程序改变的错误回归是可能的。

   预期的错误有没有出现的吗?这种情况更复杂了,因为这表明在系统或应用程序内某些不祥的事情已经发送变化了,也可能是重要的事务规则被滥用或没有应用到所有事务上。

   数据回归:所有捕获/重放工具在重放完成后,如果数据本身出现了差异还必须发出提醒信号,例如,在测试一个关键任务的金融系统时,我必须确保相同的金融业务安装合理的顺序完成,在p+1环境所有帐户总和都应该象p+0环境中达到平衡,如果结果不一样,我必须考虑在我的应用程序、数据库或环境中是什么改变导致了重放不精确的情况出现。

   捕获和重放套件的另一个关键特性是:在p+1环境上重放捕获的负载前,必须确保负载捕获启动时P+0环境被复位,否则可能会误诊为数据回归,而实际上应用程序,数据库和环境都没有发送任何改变。

   从属的事务需要捕获并重放,这好比钢琴家演奏完一段曲子后,磁带记录不仅记录了记录信息,还记录了每个按键被按下的频率信息,本质上,它给听众提供了一份艺术大师演奏风格的精确复本,包括所有复杂的演奏停顿(对于小于25岁的年轻读者而言,可能没有看到过钢琴演奏磁带,可以用mp3或wav文件替换,或询问一下年长的同事当年听磁带的事情。)
数据库重放:功能摘要

   感谢Oracle 11g新的数据库重放(DBR)套件为我们提供了所有讨论到的功能,DBR允许允许DBA:

   捕获在生产系统上产生的负载,这包括跨多个会话同时收集所有依赖的事务时捕获并行执行的相同SQL语句的能力。

   捕获的数据在测试系统上执行前先要做一些处理,这允许DBA调整负载重放的频率,以及重新映射到不同用户会话,不同服务的连接,或——在Oracle 11g RAC测试系统中重放时,是一个或多个数据库实例。

   在测试系统上重放捕获的经过处理过的负载,测试系统的配置符合p+1配置的要求,因此DBA可以准确地判断任何系统改变(包括应用程序改变,软件补丁,甚至硬件升级)对负载的影响,测试系统可以是测试或QA数据库环境,也可以是一个快照备用数据库(关于备用数据库后面的文章有更多的说明)。

   执行回归分析突出p+0和p+1模拟负载之间的差异,DBR会自动识别和分析错误回归,数据回归和SQL语句回归的向量。

   数据库重放的美妙之处是它消除了创建执行回归分析的模拟负载的必要性,相反,DBA可以准确地执行记录下来的SQL语句,因此这倾向于提供更准确的系统回归实况录像,因为其他外部因素(如网络等待时间)减少了或没有了,所有记录下来的SQL语句组成了重放的负载,实际上看起来几乎不会出现无用的或很少执行的代码,这些代码可能会被忽略,如果应用程序是在一个RAC集群数据库环境中的话这是很关键的。

   本文接下来的4小节提供了数据库重放功能的高级入门指南,实现它们的通用目标:在从p+0到p+1迁移一个生产系统时准确判断需要回归到什么程度,本系列后面的文章中,我会介绍如何利用数据库重放功能捕获、预处理、重放和分析重放结果。
 
第一步:录制负载

   Oracle 11g企业管理数据库控制台提供了一个非常直观的管理数据库重放功能的接口,如启用负载捕获,预处理,回归分析等,每一步它都提供了良好的状态反馈信息,图1显示了初始的数据库重放控制台界面:

   这一步看到的全部负载就是对生产数据库捕获和录制的内容,DBA只需要保证在生产系统上有足够的负载,DBR做了其他所有事情(捕获所有外部客户端发起执行的SQL语句),这包括:

   SQL查询,DML语句和DDL语句。

   PL/SQL块和远程过程调用(RPCs)。

   对象导航请求和OCI调用。

   注意DBS捕获操作执行过程中,Oracle 11g不会停止任何后台运行中的作业,所有内部客户端也可以继续产生请求。

   DBR通过一系列影子进程记录负载,这些影子进程过滤出必要的信息准确地复制系统负载,最后将这些元数据写入一系列XML文件,后面重放时就是使用的这些XML文件,Oracle 11g DBA只需要关心文件系统上是否有足够的存储空间来重放这些XML文件。

   第二步:“整理”负载

   当DBR负载录制完毕后,在重放前,总是需要对其进行一些细微的调整。例如:重新映射外部客户端的连接,以便在p+1环境中能准确地重放,在这一步中,DBR为它最后重放准备具体的元数据,所有影响重放结果的参数也是在这一步进行修改的。

   在相同数据库版本上重放时这个预处理过程必须存在,当只要数据库版本匹配,就可以在一个生产、测试或其他数据库系统上执行擦除操作,实际上,Oracle强烈建议在一个非生产服务器上执行这个元数据的“整理”操作,以不影响生产服务器的性能或健康为宜。

   第三步:重放负载

   负载已经整理好了,可以启动重放操作了,完成元数据擦除后,选定的DBR重放客户端就可以随需重放负载了。

   复位测试环境:在启动重放前,DBA首先必须复位用于测试的目标数据库和主机环境,因为在应用改变前,测试服务器的关键部位需要与生产服务器匹配,否则,可能引发非预期的回归,幸运的是,随Oracle 10g数据库出现的闪回数据库(FLASHBACK DATABASE)特性帮助我们简单完成这个任务,其他可选的包括通过RMAN恢复到一个时间点,或使用数据泵导出导入,一旦测试环境正确地复位完毕,接下来,DBA应用所有的改变到测试服务器上的生产系统,使其现在的状态变为p+1,然后传送前面捕获的负载给这个p+1服务器。

   通过重放驱动重放负载:当在p+1服务器上最后一次重放前面捕获的负载时,一个叫做重放驱动的应用程序向目标数据库系统发送请求,因为重放驱动是客户端不可知论的,对Oracle 11g而言最初发送请求的客户端类型是没有区别的,重放驱动消灭了录制的负载和向p+1系统发送请求的过程,就象是外部客户端发送的请求一样。

   因为它将在所有重放客户端之间分配所有的负载捕获流,重放驱动可能会考虑网络带宽、cpu和内存容量,重放驱动也可能充分利用重新映射连接字串,使它们建立起一对一(如单实例到单实例)或多对一(如单节点到多个RAC节点)的关系,意味着连接负载均衡可能需要考虑,同样重要的是,重放驱动会忽略最初由外部客户端产生的活动(如EM数据库控制),不会重放这种活动,同时,它还会忽略通过数据库连接连接到外部数据库或访问目录对象的活动记录。

   另一个使用数据库重放吸引人的优点是:可以同步模式或异步模式重放捕获的负载。在同步模式下,每一个事务都按照录制时的顺序准确地重放,然而,DBR也可以异步重放负载,如不考虑事务的同步性,因此可以产生比录制时更大的负载,这在试图执行一个“测试到破坏”新的或修改过的数据库环境时特别有用。
         DBR负载重放的范围:Oracle 11gR1数据库重放功能可以准确地评估下面几类对数据库环境的改变。

  ◆数据库升级
  ◆数据库打补丁
  ◆改变数据库模式
  ◆改变初始化参数
  ◆修改一个或多个RAC节点及其内连配置
  ◆操作系统平台的概念,包括从32位转移到64位
  ◆改变服务器内存或cpu配置
  ◆改变数据库的存储配置,包括在文件系统(如ext3,ntfs)、ASM存储、和/或RAW存储之间迁移数据库文件

  DBR负载重放限制:数据库重放模拟能力有一些显著的(且合理的)限制:

  ◆SQL*Loader直接路径装入不能重放,常规路径SQL*Loader操作可以重放
  ◆导入导出操作,不管是通过传统的方式还是数据泵的方式,都不能重放
  ◆Oracle共享服务器会话不能跟踪
  ◆闪回数据库恢复和Flashback查询操作不能重放
  ◆Oracle数据流,包括非基于PL/SQL的高级查询,不能重放
  ◆分布式事务处理,包括远程COMMIT操作,只能当作本地事务重放
  ◆基于Oracle调用接口(OCI)对象导航不能重放

   对于大多数部分,这些限制有意义,例如:闪回数据库本质上是一个不完全的数据库恢复操作,因此它不是正常事务处理的范畴,我也不会考虑它是否会使性能倒退,虽然限制对于共享服务器会话有意义,但仍然有一些数据库是使用共享服务器作为连接池的,因此这是一个小小的遗憾。

  第四步:回归分析

   负载重放完毕后,数据库重放将提供多个有关在p+1环境和p+0环境下负载性能不同的分析,正如我在本文最前面提到的,任何好的回归测试套件都有能力捕获和分析性能回归、数据回归和错误回归,DBR在这些方面没有让我们失望。

   例如:DBR能够通过它的一套捕获重放报告立即检测到任何性能差异,通过这些报告,可以下钻到存储在ADDM(自动数据库诊断监视器)、AWR(自动负载仓库)和活动会话历史(ASH)报告中更详细的分析。

   无论问题出自哪里,DBR都能识别并处理下列两种类型的问题:

  联机问题象征DBR可能做了一些误操作,应该先暂停,否则重放的结果变得没什么意义

  脱机问题实际上是数据库重放操作成功的预期结果,这种类型的问题通常是在重放操作结束后被检测到的下一步理论知识具备了,在本系列的下一篇文章中,我将阐述:

  在Oracle 11gR1数据库单实例上捕获一个简单的负载

  预处理捕获的负载

  在一个双节点的Oracle 11gR1 RAC集群数据库上重放预处理过的负载

  标识出在转移到类型目标环境过程中可能出现的问题

  考试大编辑整理

 
 
 
 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多