Oracle 11g数据库重放教程(二):负载重放基本实例讲解(1)

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

Oracle 11gR1提供了捕获生产环境中应用程序的负载,并在测试环境中重放负载的能力,利用这种技术判断当对系统、数据库或应用程序修改后在性能方面的影响有多大,在本文中,我将描述Oracle 11g数据库重放功能如何从当前的生产数据库中(p+0环境)捕获和准备负载,以及如何在一个Oracle 11g测试环境(作为下一个p+1数据库系统)重放相同的负载,这种技术使Oracle DBA有机会分析和隔离对性能有害的改变。


这篇文章主要集中讲述如何:


◆从一个Oracle 11g数据库捕获一个真实的负载
  ◆捕获对应的自动负载仓库(AWR)数据
  ◆为最后的负载重放准备测试数据库环境
  ◆传输生产环境配置到测试环境
  ◆预处理生产负载
  ◆在测试系统上重放负载
  ◆分析发现的任何性能问题和分歧


模拟应用程序环境


本文中关于我的测试环境有一点需要说明:为了简化过程,捕获和重放操作都使用相同的数据库。我使用的是最基本的Oracle 11g种子数据库和默认安装的样本方案。数据库将运行在带闪回日志功能的ARCHIVELOG模式下,以便需要重放时可以快速地利用FLASHBACK DATABASE命令回退到某个初始点。


第一阶段:录制负载


◆为了建立一个捕获/重放情景,我建立了一个新用户、表、索引和相关的PL/SQL对象:


◆一个新用户ADMIN,它将被用作存储所有管理对象的一个仓库,同时,我还创建了一个表存储主键的值。创建该用户和表的代码请参考附件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_GENERATOR,它的说明文件和主体文件分别参考附件E:pkg_load_generator.spc和附件F:pkg_load_generator.bdy。


◆最后,APInitialization.sql中的代码用几百行模拟数据填充了表AP.VENDORS,并在表AP.INVOICES中创建了25条发票记录,在表AP.INVOICE_ITEMS中创建了与之对应的发票详细信息条目,收集了ADMIN和AP方案下所有对象的原始统计信息,它还创建了一个目录对象DBRControl,用于数据库重放时存储结果脚本和捕获负载期间产生的XML文件。


建立一个负载捕获


至此,我们的源数据库环境初始化好了,我将启动一个真实的负载捕获,下面的图2.1.1显示了数据库重放的初始窗口,它是通过访问EM数据库控制软件的【软件和支持】标签上的【真正应用程序测试】小节下的【数据库链接】得到的。


  负载捕获设置:初始化界面
  图2.1.1:负载捕获设置:初始化界面



  如果我选择了第一个任务,在我的捕获会话执行前必须先确认所有在检查列表中列出的先决条件都已具备才行。


负载捕获设置:计划环境检查列表
 
  图2.1.2:负载捕获设置:计划环境检查列表
接下来的界面让我选择在正式捕获负载之前是否重启数据库,并过滤不需要的会话活动(如EM本身),注意我会按照Oracle 11g的最佳实践建议“清除捕获”:我会接受EM的建议停止并重启数据库以建立一个有效的捕获启动时间。


负载捕获设置:选项
 
  图2.1.3:负载捕获设置:选项



  接下来的界面显示的是给捕获会话命名和指定存储重放脚本的目录。


负载捕获设置:设置参数
 
  图2.1.4:负载捕获设置:设置参数



  接下来要求为任务调度命名,图2.1.5和图2.1.6显示了最终的任务确认设置界面。


负载捕获设置:指定EM任务名
 
  图2.1.5:负载捕获设置:指定EM任务名 


负载捕获设置:最终的任务视图
 
  图2.1.6:负载捕获设置:最终的任务视图



  最后,Oracle 11g请求最后一次确认。


负载捕获设置:任务提交
 
  图2.1.7:负载捕获设置:任务提交


捕获就启动了,只要Oracle 11g显示这个屏幕,它实际上是等我再次在源数据库上启动代表性的负载。


捕获一个真实的负载


为了通过不同用户模拟相似代码的并行执行过程,我准备了一个简单的shell脚本(参考附录G:RandomLoadGenerator.sh),它做一些CPU密集型计算的简单查询,在AP方案上产生的查询,同时在AP方案的表中插入上千行记录,我已经将我的源数据库环境配置为使用多个服务名,每一个对应一种用户,内容参考附录H:SI_Services_tnsnames.ora,我将这些服务名添加到我的数据库配置文件TNSNAMES.ORA中作为可选的连接别名。


我在我的p+0数据库环境中启动了这个负载,执行完毕后,我回到EM数据库控制台查看执行的结果,如图2.2.1所示,然后点击“停止捕获”按钮结束负载捕获。


负载捕获:回顾捕获任务状态 
  图2.2.1:负载捕获:回顾捕获任务状态


这时,Oracle 11g会要求你确认是否结束捕获过程,并显示一个计时表直到捕获完成。


负载捕获:确定终止捕获
    
  图2.2.2:负载捕获:确定终止捕获



   负载捕获:结束捕获
  图2.2.3:负载捕获:结束捕获



  当终止捕获后,Oracle 11g会询问是否捕获录制的负载对应的自动负载仓库(AWR )数据,如图2.2.4所示,我选择了捕获所有有关的AWR快照,以便于后面进行报告对比。


负载捕获:请求生成AWR快照
 
  图2.2.4:负载捕获:请求生成AWR快照


一旦捕获结束,就可以查看捕获结果看捕获是否成功,以及是否包含了足够的数据,如果发现数据不足,FLASHBACK DATABASE命令允许我回到捕获开始前的数据库状态再重新开始捕获,我也选择了“查看负载捕获报告”按钮生成一个完整的数据库捕获报告(报告链接:http://www.databasejournal.com/img/2008/05/PCW_Report_1.html)。

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

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

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

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

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

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

相关推荐