Oracle 11g数据库重放教程(二):负载重放基本实例讲解
2008-09-02 12:45:29 来源:WEB开发网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显示了最终的任务确认设置界面。
图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快照,以便于后面进行报告对比。
图2.2.4:负载捕获:请求生成AWR快照
一旦捕获结束,就可以查看捕获结果看捕获是否成功,以及是否包含了足够的数据,如果发现数据不足,FLASHBACK DATABASE命令允许我回到捕获开始前的数据库状态再重新开始捕获,我也选择了“查看负载捕获报告”按钮生成一个完整的数据库捕获报告(报告链接:http://www.databasejournal.com/img/2008/05/PCW_Report_1.html)。
第二阶段:准备重放
尽管在p+0数据库环境中成功完成了一个足够的数据库负载捕获,当在p+1环境中重放负载之前还有许多事情要做。
复位p+0环境
因为我的源和目标环境是同一个数据库,因此首先我需要将环境复位到捕获负载之前的状态,我的数据库工作在闪回日志模式,因此我只需要使用FLASHBACK DATABASE命令将其回退到初始状态:
$>rmantarget/RMAN>shutdownimmediate; RMAN>startupmount; RMAN>resetdatabasetoincarnation6; RMAN>flashbackdatabasetoscn=4162947; |
转移到p+1环境
接下来,我要做的是应用必要的改变,将我的数据库环境转到p+1状态,简单说明一下,我将做两个改变,它们对p+1环境的性能有显著的影响:
对存储过程ADMIN.PKG_SEQUENCING.NEXT_ID做了特殊处理,使用序列代替了表ADMIN.NEXT_IDS来确定AP方案中表的下一个主键值,这应该会显著提升存储过程AP.PKG_LOAD_GENERATOR.RANDOMDML的性能,在重放过程中,它在AP.INVOICES和AP.INVOICE_ITEMS表中创建随机数据项目。
删除了在AP.INVOICES.CUSTOMER_ID上的索引,并重新计算了AP方案的统计数值,因为存储过程AP.PKG_LOAD_GENERATOR.RANDOMQUERY在视图AP.RV_INVOICE_DETAILS上产生随机查询时经常使用这个索引高效地选择行,在重放时应该看到性能会如预期那样显著回退。
“整理”负载
至此,我的p+1工作环境搭建好了,可以开始为重放做一下负载预处理了,再说一次,我会使用EM数据库控制台启动预处理序列,图2.3.1显示了从“数据库重放”面板选择了“预处理负载”后的结果。
图2.3.1:预处理捕获的负载:选择一个捕获的负载
当我选择了想要的负载后,Oracle 11g会提醒我是在同一个数据库版本上进行数据库重放...
图2.3.2:预处理捕获的负载:数据库版本警告
然后启动一个新的EM调度任务完成预处理。
图2.3.3:预处理捕获的工作量:调度预处理任务
Oracle 11g提示要进行最后的确认,以提交调度任务,然后开始执行。
图2.3.4:预处理捕获的负载:最后确认
- ››oracle 恢复误删除的表和误更新的表
- ››Oracle分页查询排序数据重复问题
- ››Oracle创建dblink报错:ORA-01017、ORA-02063解决
- ››Oracle 提高SQL执行效率的方法
- ››Oracle 动态查询,EXECUTE IMMEDIATE select into...
- ››Oracle 11g必须开启的服务及服务详细介绍
- ››oracle性能34条优化技巧
- ››oracle数据库生成随机数的函数
- ››Oracle 数据库表空间容量调整脚本
- ››oracle单库彻底删除干净的方法
- ››Oracle创建表空间、创建用户以及授权、查看权限
- ››oracle 中 UPDATE nowait 的使用方法
更多精彩
赞助商链接