分类: Oracle
2008-04-24 21:18:15
现在,负载已捕获,可进行重放了。通常,您希望在单独的测试系统中进行重放,因此需要将目录 /home/oracle/dbcapture 中的文件复制到一个新的主机。请确保在将文件复制到该目录时,该目录为空。出于教学目的,您将使用同一个数据库进行重放。
在同一数据库中进行重放并不常见,但有可能出现。例如,您可能希望在主系统中重放事务,测试完成后闪回至起始点。您可能会中断一个时段,以在期间测试参数更改(您将在同一数据库中进行此更改)的效果。
您需要在播放捕获的负载之前对其进行预处理。预处理可使这些捕获的文件为重放做好准备。
现在,负载已经过预处理,可用于重放了。
捕获负载并进行预处理后,您就可在测试数据库中进行重放了。出于教学目的,您在同一数据库中预处理了负载,并将使用同一数据库重放这些活动。为此,您必须将数据库重置回起始点。您可以通过将其闪回到在捕获流程期间创建的恢复点 GOLD 来轻松实现此目的。
SQL> shutdown immediate; ... database shuts down ... SQL> startup mount ... instance starts and mounts the database ... SQL> flashback database to restore point gold; ... database will be flashed back ... SQL> alter database open resetlogs; ... database is opened ...
现在,您处于负载启动之前的一个点,可以重放之前捕获的负载了。按照以下步骤对其进行重放。
本例中,您将数据库闪回至该 SCN 号。因此,您遵循了规定。
$ wrc userid=system password=* replaydir=/home/oracle/dbcapture
Workload Replay Client: Release 11.1.0.4.0 - Beta on Wed Jun 6 01:47:53 2007 Copyright (c) 1982, 2006, Oracle. All rights reserved. Wait for the replay to start (01:47:53)此时,重放客户端仅仅是等待重放管理程序(数据库控制)告知其启动。您可以决定是否启动多个客户端来并行处理负载。
不一定。看看下一个量度:Database Time(数据库时间)。该值没有变化 — 大约 2 秒钟。因此,您实施的这些更改没有带来任何明显的改善。
数据库参数更改 — 假如,您要更改参数 db_file_multiblock_read_count 的默认值,那么是从 16 改为 256 还是 128?亦或是将其设为 64 或 32?选择有限,但影响可能无限;更改此值会对优化程序带来极大影响,对某个查询有益的更改可能会破坏另外 100 个查询。如何确定该参数的最佳值?
数据库重放可轻松应对这种情况。您可以从生产系统捕获负载,而后将捕获的负载移至不同的测试系统中,并将 db_file_multiblock_read_count 设为 32,然后重放负载。之后,您可以将数据库闪回至初始状态,将该值设为 64,并重放相同的负载。您可以针对该参数所有可能的值重复执行这一过程:闪回、设置值、重放捕获的负载。每次重放时,您可捕获重放前后的 AWR 快照并进行比较。然后选择可带来最佳整体结果的参数值。如果没有数据库重放,则根本不可能确定出最佳值。
操作系统升级 — 您计划升级操作系统或只是应用一个小补丁来修复 I/O 问题,但您如何能确保它不会带来任何破坏或带来一些其它问题?很简单:只要捕获负载并在应用补丁的测试系统中对其进行重放。该方法同样也适用于内核参数更改。
应用补丁 — 假设您发现一个错误,并且有相应的补丁可用。但您无法确保其会对现有操作产生何种影响,当然,您也可以和企业中 1000 位其他用户共同找出答案。数据库重放将为您解决这一难题。
调试 — 总是会有一些会带来意外结果的令人讨厌的程序。幸运的是,有了数据库重放,调试变得前所未有的轻松。只需在程序运行期间捕获负载,并移至一个新系统,更改程序逻辑以加入一些调试信息,而后重放负载、分析输出并解决问题。如果第一次并未凑效,不要失去信心。重复该过程(从重放开始;无需再次捕获)直至找到解决方案。
对象更改 — 您希望添加索引或将索引从 b 树转换为位图。这会对 INSERT 语句产生何种影响?会在何处产生影响?不要猜测;只需捕获负载并在测试系统中进行重放即可。
数据库升级 — 这是梦寐以求的更改确保。升级至 Oracle 数据库 11g 的时代已经到来。最大的问题是:您所有的应用程序都会正常运行甚至是表现更好吗?无需多虑,只要从 Oracle 数据库 10g 捕获负载并在 Oracle 数据库 11g 中进行重放即可。您不是在新版本上测试一些复合事务,而是在测试应用程序每天都在使用的 SQL。如果有些事情并未按计划进行,则在新系统中对其进行调整,直至您获得完全满意的结果。
(注:截至本文撰写之日,Oracle 数据库 11g 还只有测试版,尚不支持来自 Oracle 数据库 10g 的捕获。但是,该功能将在 Oracle 数据库 11g 的生产版中提供。)
平台更改 — 假设您希望将数据库平台从 Solaris 移植到 HP-UX(其中没有提供适用于文件系统的异步 I/O)。性能是否还会一样?为什么要猜测?只要捕获 Solaris 中的负载并在 HP-UX 中进行重放即可。
转换到 Oracle 真正应用集群 (RAC) — 这是一个普遍问题:您计划将数据库从单一实例转换为 RAC 实例。应用程序表现是否如初?获取答案的唯一方法是运行实际的负载,对其进行捕获,而后在 RAC 数据库中进行重放。
更改从来都是困难重重,但也不再是无法忍受。您可以通过使用新的数据库重放工具捕获最终用户放入系统中的确切活动,而后在测试系统上进行重放,以精确地衡量更改影响来降低多数风险,而这些都只需几下鼠标点击和键盘敲击即可实现。请记住,您还可以测试应用程序的功能,并不仅仅限于性能。