Oracle 11g数据库:数据库重放.docx
《Oracle 11g数据库:数据库重放.docx》由会员分享,可在线阅读,更多相关《Oracle 11g数据库:数据库重放.docx(43页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、Oracle DBA很早就盼望能够在生产环境中捕获应用程序的负载,然后通过在测试环境中重放捕获的负载来判断数据库或应用程序的改动对数据库性能的影响,Oracle 11g数据库新的数据库重放特性使DBA可以捕获,处理负载,然后有选择性地或跨大范围的数据库环境和平台全部重放,本文为在日益不稳定的数据库环境中使用Oracle 11g数据库重放有效地快速预报应用程序的改变对性能的影响提供一个入门。 如果我在IT行业这几年教会了我一切,那它是继墨菲定律(凡事只要有可能出错,那就一定会出错)之后的又一真理了,过去的几年里,我认 识到了多个墨菲定律推论的正确性,包括“替代的零件往往不能代用”及特别是“墨菲实
2、际上是一个乐观主义者”的回答,我希望有一天我自己的推论也能通过长期 的观察被添加到这些严格的定律中,我的推论就是:“没有东西能够象在测试环境那样在生产环境中运转”。Oracle DBA面临一个严峻的挑战:如何准确预报下一组对数据库或应用程序,甚至是硬件配置的改动对整个数据库环境产生的负面影响。这里所说的整个环境字面上的意思是:任何应用程序运行时执行的每一条SQL语句,不管它仅仅是一个简单的查询语句还是包括大量DML语句的批处理作业,都必须捕获。这个挑战目前变得更加尖锐,因为当前的应用程序负载大都是跨多个技术产生的:N层应用程序服务器、web farms、甚至传统的客户端/服务器模式应用程序。况
3、且,当某个应用程序执行速度慢下来时,要跟踪追捕检查性能下降的根本原因几乎不可能的。它可能是因不正确的网络配置、不正确的应用程序服务器配置、甚至可能是因为应用程序客户端环境变量设置不正确引起的。目前实现这个艰巨的目标唯一的选择是“捕获/重放”应用程序负载产品套件,这类应用程序是专门设计用于捕获当前生产环境数据库已经执行过的完整负载(p+0),然后重放该负载(p+1)。然而,以我多年的经验看来,这意味着公司要尽早购买第三方较昂贵的解决方案(如HP的LoadRunner工具)。软件的许可成本和服务器的配置成本需要集中精力考虑,特别是人力资源配置的考虑,可能在捕获/重放负载开始之前很容易就会达到六位数
4、美金的投入了。这就是为什么许多IT机构放弃了这个想法,因为测试应用程序性能倒退的成本因素使其变得不太可能。性能倒退之外的因素我之前写的关于Oracle 11g新的SQL语句性能调试特性:SQL性能分析器(SPA)和SQL计划管理器(SPM)已经讨论过Oracle 11g是如何让DBA定位因应用程序环境改变引起的性能提升、保持原样、性能倒退的SQL语句的,所有捕获/重放工具都必须要能捕获并能比较源(p+0) 和未来(p+1)系统、应用程序、数据库性能统计,特别是当前性能较低的SQL语句。但这里我还要提出另外两个需要标记的回归类型:错误回归:在 重放捕获的负载时,常常会遇到错误,事实上这个错误几乎
5、就是一个想要的结果,例如:我想校验一个预期中的异常,如违背引用完整性(如主键、外键、唯一键、 CHECK、NOT NULL约束)出现时能被正确地捕获,同时,我还希望有违背重要的事务规则的情况出现能被捕获到,如在检查职员工资单时发现基本工资与总工资扣除所有费用 后不平衡的情况,我希望这种异常能被当作错误一样被捕获到。因此,任何强大的捕获/重放工具都必须能够监视下面三种类型的错误回归:所有预期的错误都发生了吗?有不是预期的错误状态出现吗?很显然,这表明严格的因系统或应用程序改变的错误回归是可能的。预期的错误有没有出现的吗?这种情况更复杂了,因为这表明在系统或应用程序内某些不祥的事情已经发送变化了,
6、也可能是重要的事务规则被滥用或没有应用到所有事务上。数据回归:所有捕获/重放工具在重放完成后,如果数据本身出现了差异还必须发出提醒信号,例如,在测试一个关键任务的金融系统时,我必须确保相同的 金融业务安装合理的顺序完成,在p+1环境所有帐户总和都应该象p+0环境中达到平衡,如果结果不一样,我必须考虑在我的应用程序、数据库或环境中是什么 改变导致了重放不精确的情况出现。捕获和重放套件的另一个关键特性是:在p+1环境上重放捕获的负载前,必须确保负载捕获启动时P+0环境被复位,否则可能会误诊为数据回归,而实际上应用程序,数据库和环境都没有发送任何改变。从属的事务需要捕获并重放,这好比钢琴家演奏完一段
7、曲子后,磁带记录不仅记录了记录信息,还记录了每个按键被按下的频率信息,本质上,它给听众提供 了一份艺术大师演奏风格的精确复本,包括所有复杂的演奏停顿(对于小于25岁的年轻读者而言,可能没有看到过钢琴演奏磁带,可以用mp3或wav文件替 换,或询问一下年长的同事当年听磁带的事情。)数据库重放:功能摘要感谢Oracle 11g新的数据库重放(DBR)套件为我们提供了所有讨论到的功能,DBR允许允许DBA:捕获在生产系统上产生的负载,这包括跨多个会话同时收集所有依赖的事务时捕获并行执行的相同SQL语句的能力。捕获的数据在测试系统上执行前先要做一些处理,这允许DBA调整负载重放的频率,以及重新映射到不
8、同用户会话,不同服务的连接,或-在Oracle 11g RAC测试系统中重放时,是一个或多个数据库实例。在测试系统上重放捕获的经过处理过的负载,测试系统的配置符合p+1配置的要求,因此DBA可以准确地判断任何系统改变(包括应用程序改变,软件补丁,甚至硬件升级)对负载的影响,测试系统可以是测试或QA数据库环境,也可以是一个快照备用数据库(关于备用数据库后面的文章有更多的说明)。执行回归分析突出p+0和p+1模拟负载之间的差异,DBR会自动识别和分析错误回归,数据回归和SQL语句回归的向量。数据库重放的美妙之处是它消除了创建执行回归分析的模拟负载的必要性,相反,DBA可以准确地执行记录下来的SQL
9、语句,因此这倾向于提供更准确的 系统回归实况录像,因为其他外部因素(如网络等待时间)减少了或没有了,所有记录下来的SQL语句组成了重放的负载,实际上看起来几乎不会出现无用的或很 少执行的代码,这些代码可能会被忽略,如果应用程序是在一个RAC集群数据库环境中的话这是很关键的。本文接下来的4小节提供了数据库重放功能的高级入门指南,实现它们的通用目标:在从p+0到p+1迁移一个生产系统时准确判断需要回归到什么程度,本系列后面的文章中,我会介绍如何利用数据库重放功能捕获、预处理、重放和分析重放结果。第一步:录制负载Oracle 11g企业管理数据库控制台提供了一个非常直观的管理数据库重放功能的接口,如
10、启用负载捕获,预处理,回归分析等,每一步它都提供了良好的状态反馈信息,图1显示了初始的数据库重放控制台界面:(点击查看大图)图1:数据库重放控制台主界面这一步看到的全部负载就是对生产数据库捕获和录制的内容,DBA只需要保证在生产系统上有足够的负载,DBR做了其他所有事情(捕获所有外部客户端发起执行的SQL语句),这包括:SQL查询,DML语句和DDL语句。PL/SQL块和远程过程调用(RPCs)。对象导航请求和OCI调用。注意DBS捕获操作执行过程中,Oracle 11g不会停止任何后台运行中的作业,所有内部客户端也可以继续产生请求。DBR通过一系列影子进程记录负载,这些影子进程过滤出必要的信
11、息准确地复制系统负载,最后将这些元数据写入一系列XML文件,后面重放时就是使用的这些XML文件,Oracle 11g DBA只需要关心文件系统上是否有足够的存储空间来重放这些XML文件。第二步:“整理”负载当DBR负载录制完毕后,在重放前,总是需要对其进行一些细微的调整。例如:重新映射外部客户端的连接,以便在p+1环境中能准确地重放,在这一步中,DBR为它最后重放准备具体的元数据,所有影响重放结果的参数也是在这一步进行修改的。在相同数据库版本上重放时这个预处理过程必须存在,当只要数据库版本匹配,就可以在一个生产、测试或其他数据库系统上执行擦除操作,实际上,Oracle强烈建议在一个非生产服务器
12、上执行这个元数据的“整理”操作,以不影响生产服务器的性能或健康为宜。第三步:重放负载负载已经整理好了,可以启动重放操作了,完成元数据擦除后,选定的DBR重放客户端就可以随需重放负载了。复位测试环境:在启动重放前,DBA首先必须复位用于测试的目标数据库和主机环境,因为在应用改变前,测试服务器的关键部位需要与生产服务器匹配,否则,可能引发非预期的回归,幸运的是,随Oracle 10g数 据库出现的闪回数据库(FLASHBACK DATABASE)特性帮助我们简单完成这个任务,其他可选的包括通过RMAN恢复到一个时间点,或使用数据泵导出导入,一旦测试环境正确地复位完毕,接 下来,DBA应用所有的改变
13、到测试服务器上的生产系统,使其现在的状态变为p+1,然后传送前面捕获的负载给这个p+1服务器。通过重放驱动重放负载:当在p+1服务器上最后一次重放前面捕获的负载时,一个叫做重放驱动的应用程序向目标数据库系统发送请求,因为重放驱动是客 户端不可知论的,对Oracle 11g而言最初发送请求的客户端类型是没有区别的,重放驱动消灭了录制的负载和向p+1系统发送请求的过程,就象是外部客户端发送的请求一样。因为它将在所有重放客户端之间分配所有的负载捕获流,重放驱动可能会考虑网络带宽、cpu和内存容量,重放驱动也可能充分利用重新映射连接字串,使它们建立起一对一(如单实例到单实例)或多对一(如单节点到多个R
14、AC节点)的关系,意味着连接负载均衡可能需要考虑,同样重要的是,重放驱动会忽略最初由外部客户端产生的活动(如EM数据库控制),不会重放这种活动,同时,它还会忽略通过数据库连接连接到外部数据库或访问目录对象的活动记录。另一个使用数据库重放吸引人的优点是:可以同步模式或异步模式重放捕获的负载。在同步模式下,每一个事务都按照录制时的顺序准确地重放,然而, DBR也可以异步重放负载,如不考虑事务的同步性,因此可以产生比录制时更大的负载,这在试图执行一个“测试到破坏”新的或修改过的数据库环境时特别有 用。DBR负载重放的范围:Oracle 11gR1数据库重放功能可以准确地评估下面几类对数据库环境的改变
15、。数据库升级数据库打补丁改变数据库模式改变初始化参数修改一个或多个RAC节点及其内连配置操作系统平台的概念,包括从32位转移到64位改变服务器内存或cpu配置改变数据库的存储配置,包括在文件系统(如ext3,ntfs)、ASM存储、和/或RAW存储之间迁移数据库文件DBR负载重放限制:数据库重放模拟能力有一些显着的(且合理的)限制:SQL*Loader直接路径装入不能重放,常规路径SQL*Loader操作可以重放导入导出操作,不管是通过传统的方式还是数据泵的方式,都不能重放Oracle共享服务器会话不能跟踪闪回数据库恢复和Flashback查询操作不能重放Oracle数据流,包括非基于PL/S
16、QL的高级查询,不能重放分布式事务处理,包括远程COMMIT操作,只能当作本地事务重放基于Oracle调用接口(OCI)对象导航不能重放对于大多数部分,这些限制有意义,例如:闪回数据库本质上是一个不完全的数据库恢复操作,因此它不是正常事务处理的范畴,我也不会考虑它是否会使性能倒退,虽然限制对于共享服务器会话有意义,但仍然有一些数据库是使用共享服务器作为连接池的,因此这是一个小小的遗憾。第四步:回归分析负载重放完毕后,数据库重放将提供多个有关在p+1环境和p+0环境下负载性能不同的分析,正如我在本文最前面提到的,任何好的回归测试套件都有能力捕获和分析性能回归、数据回归和错误回归,DBR在这些方面
17、没有让我们失望。例如:DBR能够通过它的一套捕获重放报告立即检测到任何性能差异,通过这些报告,可以下钻到存储在ADDM(自动数据库诊断监视器)、AWR(自动负载仓库)和活动会话历史(ASH)报告中更详细的分析。无论问题出自哪里,DBR都能识别并处理下列两种类型的问题:联机问题象征DBR可能做了一些误操作,应该先暂停,否则重放的结果变得没什么意义脱机问题实际上是数据库重放操作成功的预期结果,这种类型的问题通常是在重放操作结束后被检测到的下一步理论知识具备了,在本系列的下一篇文章中,我将阐述:在Oracle 11gR1数据库单实例上捕获一个简单的负载预处理捕获的负载在一个双节点的Oracle 11
18、gR1 RAC集群数据库上重放预处理过的负载标识出在转移到类型目标环境过程中可能出现的问题Oracle 11gR1提供了捕获生产环境中应用程序的负载,并在测试环境中重放负载的能力,利用这种技术判断当对系统、数据库或应用程序修改后在性能方面的影响有多大,在本文中,我将描述Oracle 11g数据库重放功能如何从当前的生产数据库中(p+0环境)捕获和准备负载,以及如何在一个Oracle 11g测试环境(作为下一个p+1数据库系统)重放相同的负载,这种技术使Oracle DBA有机会分析和隔离对性能有害的改变。 这篇文章主要集中讲述如何:从一个Oracle 11g数据库捕获一个真实的负载捕获对应的自
19、动负载仓库(AWR)数据为最后的负载重放准备测试数据库环境传输生产环境配置到测试环境预处理生产负载在测试系统上重放负载分析发现的任何性能问题和分歧模拟应用程序环境本文中关于我的测试环境有一点需要说明:为了简化过程,捕获和重放操作都使用相同的数据库。我使用的是最基本的Oracle 11g种子数据库和默认安装的样本方案。数据库将运行在带闪回日志功能的ARCHIVELOG模式下,以便需要重放时可以快速地利用FLASHBACK DATABASE命令回退到某个初始点。第一阶段:录制负载为了建立一个捕获/重放情景,我建立了一个新用户、表、索引和相关的PL/SQL对象:一个新用户ADMIN,它将被用作存储所
20、有管理对象的一个仓库,同时,我还创建了一个表存储主键的值。创建该用户和表的代码请参考附件A:ADMINSetup.sql。PL/SQL包ADMIN.PKG_SEQUENCING控制指定新的主键值,该包的说明参考附件B:pkg_sequencing.spc,该包最初的版本内容参考附件C:pkg_sequencing_v1.bdy。另一个用户AP,它将封装一个帐户支付系统的方案,包括新的表AP.VENDORS,AP.INVOICES和AP.INVOICE_ITEMS,创建这个方案及其相关的对象脚本参考附件D:APSetup.sql。为了填充AP方案的对象,我创建了一个包AP.PKG_LOAD_GE
21、NERATOR,它的说明文件和主体文件分别参考附件E:pkg_load_generator.spc和附件F:pkg_load_generator.bdy。最后,APInitialization.sql中的代码用几百行模拟数据填充了表AP.VENDORS,并在表AP.INVOICES中创建了 25条发票记录,在表AP.INVOICE_ITEMS中创建了与之对应的发票详细信息条目,收集了ADMIN和AP方案下所有对象的原始统计信息,它还 创建了一个目录对象DBRControl,用于数据库重放时存储结果脚本和捕获负载期间产生的XML文件。建立一个负载捕获至此,我们的源数据库环境初始化好了,我将启动一
22、个真实的负载捕获,下面的图2.1.1显示了数据库重放的初始窗口,它是通过访问EM数据库控制软件的【软件和支持】标签上的【真正应用程序测试】小节下的【数据库链接】得到的。点击查看大图(点击查看大图)图2.1.1:负载捕获设置:初始化界面如果我选择了第一个任务,在我的捕获会话执行前必须先确认所有在检查列表中列出的先决条件都已具备才行。点击查看大图(点击查看大图)图2.1.2:负载捕获设置:计划环境检查列表接下来的界面让我选择在正式捕获负载之前是否重启数据库,并过滤不需要的会话活动(如EM本身),注意我会按照Oracle 11g的最佳实践建议“清除捕获”:我会接受EM的建议停止并重启数据库以建立一个
23、有效的捕获启动时间。点击查看大图(点击查看大图)图2.1.3:负载捕获设置:选项接下来的界面显示的是给捕获会话命名和指定存储重放脚本的目录。点击查看大图(点击查看大图)图2.1.4:负载捕获设置:设置参数接下来要求为任务调度命名,图2.1.5和图2.1.6显示了最终的任务确认设置界面。点击查看大图(点击查看大图)图2.1.5:负载捕获设置:指定EM任务名点击查看大图(点击查看大图)图2.1.6:负载捕获设置:最终的任务视图最后,Oracle 11g请求最后一次确认。点击查看大图(点击查看大图)图2.1.7:负载捕获设置:任务提交捕获就启动了,只要Oracle 11g显示这个屏幕,它实际上是等我
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Oracle 11g数据库:数据库重放 11 数据库 重放
限制150内