使用 SQL Performance Analyzer 评估负载变化的影响

目的

本教程将介绍如何使用 SQL Performance Analyzer 主动调优 SQL。

大约 40 分钟

主题

本教程讨论以下主题:

概述
前提条件
总结

将光标置于此图标上可以加载和查看本教程的所有屏幕截图。(警告:因为此操作会同时加载所有屏幕截图,所以网速较慢时,响应时间可能会比较长。)

注:此外,您还可以在下列步骤中将光标放在每个单独的图标上,从而仅加载和查看与该步骤相关的屏幕截图。可以通过单击各个屏幕截图将其隐藏。

SQL Performance Analyzer 可用于预测和防止由于数据库环境改变影响了 SQL 执行计划的结构而引起的潜在性能问题。这些改变包括(但不限于):

DBA 即使在最复杂的环境中也可以使用 SQL Performance Analyzer 预测由于上述更改引起的 SQL 性能变化(执行计划、统计信息)。由于应用程序在开发生命周期中不断演变,因此数据库应用程序开发人员可以测试模式、数据库对象、重写应用程序等的更改,以减少潜在的性能影响。

利用 SQL Performance Analyzer 还可以比较 SQL 性能统计信息。

在本教程中,您将创建一个任务来比较应用补丁之前和之后的 SQL 负载的性能。任何由于补丁应用程序引起的 SQL 性能下降都可以使用 SQL Tuning Advisor 来调优,这将确保系统上的 SQL 负载得到真正改善。最后,您将模拟 Exadata 存储服务器的使用来确定其对负载的可能影响。

返回主题列表

开始学习本教程之前,您应该先完成以下步骤:

1.
2.

首先,您需要设置 SQL Performance Analyzer 将使用的环境。执行以下步骤:

1.

打开一个终端窗口,从 SQL 文件所在的目录执行以下命令。setup_demo.sh 脚本将创建相应的数据库对象并加载将在本教程中使用的数据。运行此脚本可能需要几分钟。

cd <your working directory>/spa
./setup_demo.sh

将鼠标移到该图标上可以查看该图像

2.

现在,您可以运行 run_workload_50q.sh 脚本,针对您刚刚加载的数据生成一些负载。执行以下脚本:

./run_workload_50q.sh 2

注:“2”指明脚本中将执行的查询次数。运行此脚本可能需要几分钟。

将鼠标移到该图标上可以查看该图像

3.

您还需要运行 create_sts.sql 脚本,为您刚运行的负载创建一个 SQL 调优集。执行以下命令:


sqlplus apps/apps
@create_sts

将鼠标移到该图标上可以查看该图像

返回主题列表

导向工作流创建一个 SQL Performance Analyzer 任务,并使用手动创建的重放试验执行一些自定义试验。在本示例中,您刚刚安装了一个新的补丁集并且希望看到是否有性能下降的 SQL。执行以下步骤:

1.

打开一个浏览器,输入以下 URL:

http://<hostname>:1158/em

输入 system 作为用户名,指定口令,然后单击 Login

将鼠标移到该图标上可以查看该图像

2.

单击 Software and Support 选项卡。

将鼠标移到该图标上可以查看该图像

3.

选择 Real Application Testing 下方的 SQL Performance Analyzer

将鼠标移到该图标上可以查看该图像

4.

选择 SQL Performance Analyzer Workflows 下方的 Guided Workflow

将鼠标移到该图标上可以查看该图像

5.

您要执行的第一项任务是基于 SQL 调优集创建一个 SQL Performance Analyzer 任务。单击该任务的 Execute 图标。

将鼠标移到该图标上可以查看该图像

6.

为 Name 输入 OBE1,然后单击 SQL Tuning Set 的手电筒图标。

将鼠标移到该图标上可以查看该图像

7.

选择 HR_WORKLOAD SQL 调优集,然后单击 Select

将鼠标移到该图标上可以查看该图像

8.

单击 Create 创建 SQL Performance Analyzer 任务。

将鼠标移到该图标上可以查看该图像

9.

现在,您可以为最初的环境创建 SQL 调优集的重放,这将创建一个您更改后与其进行比较的基准。单击导向工作流中第二个步骤的 Execute 图标。当您重放 STS 时,STS 中的 SQL 根据环境一次测试执行一个,不需要重新运行应用程序。

将鼠标移到该图标上可以查看该图像

10.

为 Name 输入 OBE_BEFORE_CHANGE,选中 Trial environment established 复选框,然后单击 Submit

将鼠标移到该图标上可以查看该图像

11.

作业运行。单击 Refresh 几次,直至作业完成。作业运行可能需要一两分钟。

将鼠标移到该图标上可以查看该图像

12.

当显示绿色对号时,您的作业已完成。

将鼠标移到该图标上可以查看该图像

13.

现在,您需要进行更改。这是在我们的情景中您将应用补丁集的地方。切换到终端窗口,执行 make_changes.sh 脚本:


./make_changes.sh

将鼠标移到该图标上可以查看该图像

14.

现在,您可以通过应用的补丁集重放 SQL 调优集以便执行比较。单击导向工作流中第三个步骤的 Execute 图标。

将鼠标移到该图标上可以查看该图像

15.

为 Name 输入 OBE_AFTER_CHANGE,选中 Trial environment established 复选框,然后单击 Submit

将鼠标移到该图标上可以查看该图像

16.

作业运行。单击 Refresh 几次,直至作业完成。现在,您可以比较两个重放作业了。单击导向工作流中第四个步骤的 Execute 图标。

将鼠标移到该图标上可以查看该图像

17.

确保 Trial Name 1 设置为 OBE_BEFORE_CHANGE,Trial Name 2 设置为 OBE_AFTER_CHANGE。选择 Buffer Gets 作为 Comparison Metric,然后单击 Submit

将鼠标移到该图标上可以查看该图像

18.

当第四个任务完成时,单击第五个步骤的 Execute 图标,查看比较报告。

将鼠标移到该图标上可以查看该图像

19.

通过应用补丁集,大多数 SQL 都有改进,但是您会体验到轻微的性能下降。单击 Regression 的条形图。

将鼠标移到该图标上可以查看该图像

20.

有四个 SQL 语句需要进一步检查。单击路径式导航栏,返回前一个窗口。

将鼠标移到该图标上可以查看该图像

返回主题列表

您可以针对任何在导向工作流中性能下降的 SQL 运行 SQL Tuning Advisor。执行以下步骤:

1.

在 SQL Performance Analyzer Task Report 页面中,单击 Run SQL Tuning Advisor

将鼠标移到该图标上可以查看该图像

2.

为 Tuning Task Name 输入 OBE_TUNE_REGRESSED_SQL,单击 OK

将鼠标移到该图标上可以查看该图像

3.

您的调优任务已成功创建。单击 Advisor Central 路径式导航栏。

将鼠标移到该图标上可以查看该图像

4.

直至等到作业完成。这可能需要几分钟的时间。作业完成后,单击 OBE_TUNE_REGRESSED_SQL 链接。

将鼠标移到该图标上可以查看该图像

5.

SQL Tuning Result Summary 页面显示已经检查了 4 条 SQL 语句,还显示已经发现了为每条语句推荐的 SQL Profile。单击 Show all results 查看有关这些发现的详细信息。

将鼠标移到该图标上可以查看该图像

6.

您将看到为每条 SQL 语句都推荐了一个 SQL Profile。单击 Implement All SQL Profiles

将鼠标移到该图标上可以查看该图像

7.

要确认实施,单击 Yes

将鼠标移到该图标上可以查看该图像

8.

SQL Profile 创建完毕。单击 Advisor Central 路径式导航栏。

将鼠标移到该图标上可以查看该图像

返回主题列表

现在,您可以比较重放试验和调优后的 SQL,查看是否有任何性能下降。执行以下步骤:

1.

选择 SQL Performance Analyzer 链接。

将鼠标移到该图标上可以查看该图像

2.

选择 SQL Performance Analyzer Tasks 下方的 OBE1 链接。

将鼠标移到该图标上可以查看该图像

3.

单击 Replay Trials 下方的 Create SQL Trial

将鼠标移到该图标上可以查看该图像

4.

输入 OBE_AFTER_TUNE_REGRESSED_SQL 作为名称,单击 Trial environment established 复选框,然后单击 Submit

将鼠标移到该图标上可以查看该图像

5.

SQL 重放作业已成功创建。单击 Refresh 直至作业完成。现在,您可以运行 OBE_BEFORE_CHANGE 试验和 OBE_AFTER_TUNE_REGRESSED_SQL 试验两者的比较报告。单击 Run SQL Trial Comparison

将鼠标移到该图标上可以查看该图像

6.

为 Trial 1 Name 选择 OBE_BEFORE_CHANGE,为 Trial 2 Name 选择 OBE_AFTER_TUNE_REGRESSED_SQL。为 Comparison Metric 选择 Buffer Gets,单击 Submit

将鼠标移到该图标上可以查看该图像

7.

比较创建完毕。单击新建的 Comparison Report 的眼镜图标。

将鼠标移到该图标上可以查看该图像

8.

注意,此时没有任何性能下降。因此,使用调优的 SQL 可以安全地应用补丁集,因为这会产生 87% 的性能提高。

将鼠标移到该图标上可以查看该图像

返回主题列表

Oracle Exadata 提供能识别数据库操作的存储服务,例如,能够将数据库处理从数据库服务器卸载到存储设备,同时对 SQL 处理和数据库应用程序透明。11g 第 2 版中新增的 SQL Performance Analyzer 特性能够模拟与您的负载结合使用 Exadata 时的效果。通过 Oracle 数据库与 Exadata 的紧密集成,可以在没有实际 Exadata 存储服务器的情况下模拟 Exadata 的使用效果。要查看如何对负载执行 Exadata,执行以下步骤:

1.

选择 SQL Performance Analyzer 链接。

将鼠标移到该图标上可以查看该图像

2.

使用终端窗口以用户 DBA 的身份启动一个 SQL*Plus 会话,然后执行 flush.sql 脚本清空各种 SGA 缓存。

sqlplus / as sysdba
@flush

将鼠标移到该图标上可以查看该图像

3.

返回 Enterprise Manager,单击 Exadata Simulation

将鼠标移到该图标上可以查看该图像

4.

为 Task Name 输入 COMPARE_EXADATA,为 SQL Tuning Set 输入 APPS.HR_WORKLOAD,然后单击 Submit

将鼠标移到该图标上可以查看该图像

5.

将执行 SQL Performance Analyzer 任务。单击 Refresh 查看该任务的进度,或者只是等待该任务完成。

将鼠标移到该图标上可以查看该图像

6.

该任务完成后,单击 COMPARE_EXADATA 链接。

将鼠标移到该图标上可以查看该图像

7.

您将看到已经执行了两个 SQL 试验,一个禁用了 Exadata 模拟,一个模拟了 Exadata 的使用。还可以看到一个比较这两个 SQL 试验的报告。单击新建的 Comparison Report 的眼镜图标。

将鼠标移到该图标上可以查看该图像

8.

这个比较报告表明,与该负载结合使用 Exadata 将大幅减少存储设备与数据库实例之间传送的数据量。

将鼠标移到该图标上可以查看该图像

9.

滚动到该页面的底部,单击 Top 10 SQL Statements Based on Impact on Workload 中的最后一条 SQL 语句。

将鼠标移到该图标上可以查看该图像

10.

单击 SQL Text 标签旁边的加号按钮。

将鼠标移到该图标上可以查看该图像

11.

现在,您可以看到该 SQL 语句的完整内容了。该语句联接了两个表,并且只返回具有特定属性值的记录。

将鼠标移到该图标上可以查看该图像

12.

向下滚动至 Plan Comparison 部分。在这里您可以看到,没有使用 Exadata,正在执行两个全表扫描 (TABLE ACCESS FULL)。在即席查询未定义支持查询的索引的数据仓储情况下,这是很常见的。使用 Exadata 时,您可以看到正在向 Exadata 存储服务器压入筛选谓词 (TABLE ACCESS STORAGE FULL)。结果是,只有满足筛选条件的行才返回给数据库服务器,这就意味着该语句的 I/O 互通字节大大减少了。

将鼠标移到该图标上可以查看该图像

13.

单击该页面顶部的 SQL Performance Analyzer Task Report 路径式导航栏,返回 Comparison Report。

将鼠标移到该图标上可以查看该图像

14.

您已经看到 Exadata 将如何针对该负载大幅减少从存储设备返回数据库服务器的信息量。这将使数据库服务器能更高效地处理负载,从而提升整体性能。

将鼠标移到该图标上可以查看该图像

返回主题列表

执行以下步骤清理您的环境:

1.

切换回终端窗口,执行 reset_demo.sh 脚本。

./reset_demo.sh

2.

此时,您可以再次执行此 OBE 教程。但是,这一次,您不需要执行“设置环境”主题中的第一个步骤。您可以从您运行负载的第二个步骤开始。

返回主题列表

在本教程中,您学习了如何:

执行导向工作流
使用最初的环境重放 SQL 调优集
应用补丁,然后使用更改后的环境重放 SQL 调优集
比较重放以查看所有性能下降
运行 SQL Tuning advisor 以便对导致性能下降的 SQL 进行调优
比较重放试验和调优的 SQL,显示已不存在任何性能下降
模拟 Exadata 的使用

返回主题列表

将鼠标移到该图标上可以隐藏所有屏幕截图