本教程将介绍如何使用数据库重放特性通过捕获生产系统中的实际数据库负载并在测试系统中重放来进行实际测试。
大约 1 小时
本教程包括下列主题:
| 概述 | |
| 先决条件 | |
| 设置环境 | |
| 使用数据库重放 | |
| 查看数据库重放报告 | |
| 进行数据库更改并重放此负载 | |
| 总结 |
将光标置于此图标上可以加载和查看本教程的所有屏幕截图。
(警告:因为此操作会同时加载所有屏幕截图,所以网速较慢时,响应时间可能会比较长。)
注:此外,您还可以在下列步骤中将光标放在每个单独的图标上,从而仅加载和查看与该步骤相关的屏幕截图。可以通过单击各个屏幕截图将其隐藏。
数据库重放是什么?
数据库重放特性可以捕获生产系统中的实际数据库负载并在测试系统中重放,从而允许用户进行实际测试。测试系统中的重放可以利用包括计时与并发在内的生产特性来实现。它还提供分析和报告,以突出显示潜在问题(例如,遇到的错误以及性能差异),并推荐解决问题的方法。
开始本教程之前,您应该:
| 1. | 安装 Oracle Database 11g。 |
|
| 2. | 下载 dbreplay.zip 文件并将其解压缩到您的工作目录,然后转到该工作目录。 |
|
在使用数据库重放之前,执行下列步骤来设置您的环境:
| 1. |
打开一个终端窗口。转到 dbreplay 目录,执行 first_time.csh 脚本来设置文件。 ./first_time.csh
第二次执行 first_time.csh 脚本时不会收到错误。
|
|
| 2. |
执行 wcr_demo_init.csh 脚本来设置环境。 ./wcr_demo_init.csh
|
|
| 3. | 将 dbreplay 目录添加到您的 PATH 环境变量,将 $ORACLE_HOME/lib 目录添加到 LD_LIBRARY_PATH 环境变量。在终端窗口中执行以下命令: export PATH=.:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
|
|
在本部分中,您将捕获生产负载,并使用数据库重放来重放该负载。Enterprise Manager 提供了一个界面来管理数据库重放过程中的每个步骤。
| A | 创建捕获目录 |
| B. | 捕获生产负载 |
| C. | 处理捕获的负载 |
| D. | 重放负载 |
在下一个子主题中,您将执行一次捕获。在使用 Enterprise Manager Database Control 执行捕获之前,必须在操作系统中创建一个目录。执行以下步骤,创建您的捕获目录:
| 1. | 在您的工作目录中创建一个名为 capture_dir 的目录。记住该目录的完整路径,因为稍后需要指定它。
|
要使用数据库重放,首先必须捕获要在重放过程中使用的生产系统负载。执行以下步骤,捕获生产负载:
| 1. |
使用浏览器,通过输入以下 URL 来调用 Enterprise Manager Database Control:https://<主机名>:1158/em(注:指定使用 localhost 或特定主机名来代替 <主机名>)。 以 SYS 用户身份登录,使用 SYSDBA 作为数据库口令。
|
| 2. |
选择 Software and Support 选项卡。
|
| 3. |
在 Real Application Testing 部分,选择 Database Replay。
|
| 4. |
要进行 Capture Workload 任务,单击 Go to Task 图标。
|
| 5. |
单击每项前提条件的 Acknowledge 复选框,然后单击 Next。
|
| 6. | 在 Capture Workload:Options 页面中,选择 Do not restart the database prior to capture 并单击 Next。
|
| 7. | 在 Capture Workload:Parameters 页面中,接受默认名称并单击 Create Directory Object。
|
| 8. | 在 Create Directory Object 页面中,输入 CAPDIR 作为名称(确保以大写方式输入)。在 Path 域中指定在上一子步骤中创建的目录名。单击 Test File System。
|
| 9. | 在 Host Login 页面中,输入操作系统用户名和口令。单击 Login。
|
| 10. | 显示确认页面。单击 Return。
|
| 11. | 返回 Create Directory Object 页面。单击 OK。
|
| 12. | 返回 Capture Workload:Parameters 页面,其中显示一条更新消息。单击 Next 继续捕获设置。
|
| 13. | 显示 Capture Workload:Schedule 页面。接受默认的作业名称。在 Job Schedule 部分中,接受 Start 子部分的默认值 Immediately 和 End 子部分的默认值 Not Specified。(在您自己的环境中,您应根据应用程序及其高峰时期的特性来选择捕获周期。)在页面底部,输入主机凭证并单击 Next。
|
| 14. | 注:您将在下一步为此捕获任务启动一个负载。确保在 Enterprise Manager 确认捕获已开始后立即执行该负载。同样,在该负载完成后立即停止负载捕获。为了避免捕获到大量空闲时间,建议这么做。在任何情况下,应使用 DB Time(而不是 Elapsed Time)访问数据库重放。 查看捕获信息。单击 Submit 启动捕获过程。
显示 View Workload Capture 页面,该页面确认捕获已开始。
|
| 15. | 立即返回终端窗口,然后转到 dbreplay 目录。 执行 wcr_demo_workload.csh 脚本。
监视该脚本。该脚本完成后,返回到 Enterprise Manager Database Control。
|
| 16. | 在 Enterprise Manager Database Control 中,单击 Stop Capture。
|
| 17. | 单击 Yes 确认您希望停止捕获过程。
|
| 18. | 单击 Yes,导出自动负载信息库 (AWR) 数据。
|
| 19. | 显示负载汇总页面。查看统计信息。单击 OK 返回 Workload Capture and Replay 页面。导出过程可能需要 1-2 分钟才能完成。
|
| 20. | 返回终端窗口。执行以下命令,列出在您的捕获目录中创建的目录结构中的捕获文件: find capture_dir -type f -print
|
在上一个子主题中,您捕获了负载。在使用捕获的负载进行重放之前,必须对其进行处理。在处理过程中,会将捕获的数据转换为重放文件,并创建所需的元数据。执行下列步骤,对捕获的负载进行处理:
| 1. | 返回到 Enterprise Manager Database Control 中的 Database Replay 页面。对 Preprocess Captured Workload 任务,单击 Go to Task 图标。注意:在重放负载的版本上,对捕获负载的预处理只需进行一次。
|
| 2. |
从 Capture Directory 下拉菜单中,选择您在上一个子主题中为捕获指定的目录对象。
|
| 3. | 显示汇总信息。单击 Preprocess Workload。
|
| 4. | 显示 Preprocess Captured Workload:Database Version 页面。查看显示的信息。单击 Next。
|
| 5. | 显示 Preprocess Captured Workload:Schedule 页面。接受默认作业名称和起始时间的默认值 Immediately。输入主机用户名和口令。单击 Next。
|
| 6. | 显示 Preprocess Workload:Review 页面。查看显示的信息。单击 Submit。
|
| 7. | 显示一条确认消息。单击 View Job。
|
| 8. | 显示 Job Run 页面。使用您的浏览器的重新加载按钮来刷新该页面,直到作业状态变为“Succeeded”。单击 Database 选项卡。
|
我们使用 Enterprise Manager 重放负载。此外,我们还要使用连接到重放数据库的重放客户端来完成负载重放。执行下列步骤,重放负载:
| 1. |
返回终端窗口。转到 dbreplay 目录。执行 wcr_demo_init.csh 脚本,将数据库恢复到原始状态。
|
| 2. | 返回到 Enterprise Manager Database Control。选择 Software and Support 选项卡。
|
| 3. | 在 Real Application Testing 下方,选择 Database Replay。
|
| 4. |
对 Replay Workload 任务,单击 Go to Task 图标。
|
| 5. |
在 Replay Directory 下拉菜单中,选择包含您的捕获数据的目录对象 (CAPDIR)。
|
| 6. | 该页面刷新,其中包含与您的捕获有关的信息。单击 Set Up Replay。
|
| 7. | 显示 Replay Workload:Prerequisites 页面。就本教程来说,此处无需进行任何更改。单击 Continue。
|
| 8. | 显示 Replay Workload:References to External Systems 页面。再次单击 Continue。
|
| 9. | 显示 Replay Workload:Choose Initial Options 页面。在 Replay Name 域中输入一个名称,或接受默认值。单击 Next。
|
| 10. | 显示 Replay Workload:Customize Options 页面。在此教程中,由于是在同一数据库实例上重放,因此无需进行任何更改。单击 Next。
|
| 11. | 显示 Replay Workload:Prepare Replay Clients 页面。系统提示您需要与重放客户端连接。您将通过几个步骤建立与客户端的连接。单击 Next。
|
| 12. | 显示 Replay Workload:Wait for Client Connections 页面。
|
| 11. | 返回终端窗口,执行以下命令启动重放客户端 (wrc)。指定的用户必须具有 BECOME USER 权限。 wrc REPLAYDIR=<捕获目录路径> USERID=system PASSWORD=<系统口令>
注意: 一般建议该重放客户端 (wrc) 应运行在与数据库服务器不同的系统上。在这样的情形下,可使用 Oracle Network Services 连接到数据库服务器。之所以这么做,是因为重放客户端在数据库服务器上加上一个负载可能导致某种程度的性能差异。 |
| 12. | 返回到 Enterprise Manager Database Control。检测到了连接。在 Replay Workload: Wait for Client Connections 页面中,单击 Next。
|
| 13. | 显示 Review 页面。单击 Submit。
|
| 14. | 显示 View Workload Replay 页面。您可以观察到重放的进展。
|
| 15. | 负载重放完成后,状态变为“COMPLETED”。 您应通过查看 DB Time、主要等待事件、错误、数据这些方面的差异来评估该捕获的数据库重放。 滚动至屏幕底部,对差异进行分析并查看更多详细对比指标。
不出意料,没有数据差异和错误差异。
Detailed Comparison 显示重放周期要比捕获周期短。这是因为,捕获周期包括从捕获开始到捕获结束的所有时间,而重放周期只包括负载的时长(不包括负载开始前和负载结束后的空闲时间)。 不出意料,其余的统计信息几乎没有显示出差异。
|
| 16. | 返回到终端窗口,您会看到屏幕显示的“Replay finished”消息,并发现控制权已返回给操作系统。
|
通过执行下列步骤,您可以查看多个数据库重放报告:
| 1. | 切换回 Enterprise Manager,在 View Workload Replay 窗口中单击 Report 选项卡。 注意:本教程阐释数据库重放工作流和功能。由于负载的短时性和复合性,数据库重放结果会显示出一些性能差异。而在较长的负载捕获和重放情况下,差异将不太明显。
|
| 2. | 在 Workload Replay Report 下面,单击 Run Report。 注意:如果未显示报告,请确保您的浏览器没有阻止弹出窗口。
|
| 3. | Workload Replay Report 提供该重放的高级汇总。查看报告中的信息。完成后,单击 OK 取消该报告。
|
| 4. | 在 Compare Period Report 下面,单击 Run Replay Compare Period Report。
|
| 5. | 此报告是 Oracle Database 11g 第 2 版的新增内容。它提供了一个有关重放的更为详细的信息汇总,可用作诊断分析的着手点。查看报告中的信息。完成后,单击 OK 取消该报告。
此例中,Top SQL by Change in DB Time 部分为空,因为捕获与重放之间几乎没有差异。
|
| 6. | 您还可以查看 AWR Compare Period Report。单击 Run AWR Compare Period Report。
|
| 7. | 此报告提供的详细统计信息可用于低级诊断分析。查看该报告。完成后,单击 OK。
|
| 8. | 单击 OK。
|
现在您将对数据库进行一次更改,然后再次执行重放。这次,重放将花费更多的数据库时间,因为负载中的更新将包含一些额外的相关索引管理。差异虽小却显而易见。执行以下步骤:
| 1. | 返回终端窗口。转到 dbreplay 目录。执行 wcr_demo_init.csh 脚本,将数据库恢复到原始状态。
|
| 2. | 执行 wcr_demo_dbchange.csh 脚本对表创建一些索引。
|
| 3. | 对 Replay Workload 任务,单击 Go to Task 图标。
|
| 4. | 在 Replay Directory 下拉菜单中,选择包含您的捕获数据的目录对象 (CAPDIR)。该页面刷新,其中包含与您的捕获有关的信息。单击 Set Up Replay。
|
| 5. | 显示 Replay Workload:Prerequisites 页面。就本教程来说,此处无需进行任何更改。单击 Continue。
|
| 6. | 显示 Replay Workload:References to External Systems 页面。再次单击 Continue。
|
| 7. | 显示 Replay Workload:Choose Initial Options 页面。在 Replay Name 域中输入一个名称,或接受默认值。单击 Next。
|
| 8. | 显示 Replay Workload:Customize Options 页面。在本教程中,由于是在同一数据库实例上重放,因此无需进行任何更改。单击 Next。
|
| 9. | 显示 Replay Workload:Prepare Replay Clients 页面。系统提示您需要与重放客户端连接。您将通过几个步骤完成与客户端的连接。单击 Next。
|
| 10. | 显示 Replay Workload:Wait for Client Connections 页面。
|
| 11. | 返回到终端窗口,并执行以下命令启动重放客户端。指定的用户必须具有 BECOME USER 权限。 wrc REPLAYDIR=<捕获目录路径> USERID=system PASSWORD=<系统口令> |
| 12. | 返回到 Enterprise Manager Database Control。检测到了连接。在 Replay Workload: Wait for Client Connections 页面中,单击 Next。
|
| 13. | 显示 Review 页面。单击 Submit。
|
| 14. | 负载重放完成后,状态变为“COMPLETED”。查看页面底部的 Detailed Comparison 部分。
不出所料,额外的索引维护工作导致此重放的 DB Time 适度增加。
|
在本教程中,您学习了如何:
| 捕获生产负载 | ||
| 处理捕获的负载 | ||
| 重放捕获的负载 | ||