商讯信箱
用户名: @
密  码:   注册|忘记密码
登录
个人用户经销商
您的位置:首页 > 技术频道 > 正文

Oracle11g新特性之SQL Performance Analyzer

在该系列前期的文章中,您学习了数据库重放。数据库重放是一款很棒的工具,可用于捕获数据库中的实际负载并随意重放。它是 Oracle 真正应用测试选件的一部分,它的重点是“实际”一词,即重放的负载就是数据库中实际发生的负载。

在数据库重放中,捕获的全部负载都针对数据库进行重放。但是,如果您不想那样做那该怎么办?例如,您可能很想了解 SQL 执行计划以及 SQL 性能是如何受更改影响的,因为它们会严重影响应用程序的性能和可用性。此外,数据库重放只重放捕获的负载。在生产版本中执行之前,您可能很想知道参数更改对某些 SQL 的影响。

这一领域正是真正应用测试系列的另一个重要组件 SQL Performance Analyzer (SPA) 的用武之地。通过 SPA,您可以根据各种更改类型(如初始化参数更改、优化程序统计刷新和数据库升级)播放特定的 SQL 或整个的 SQL 负载,然后生成比较报告,帮助您评估它们的影响。在本文中,您将学习如何使用 SQL Performance Analyzer 工具解决这个重要的问题。

示例问题
我们来进行一个测试。首先,我们定义要解决的问题。

这是一个典型的问题:Oracle 不使用索引,而您想了解其中的原因。为了回答这个问题,我拜读了 Oracle 精英 Tim Gorman 的经典论文“Searching for Intelligent Life in Oracle's CBO”。(在 Web 上随处都能找到这篇论文多种形式的各个版本。)

Tim 的一个建议是,将 optimizer_index_cost_adj 参数的值由默认的 100 更改为一个较小的值。这篇论文还给出了计算这个值的公式。根据公式,在我的案例中,我计算得出这个值为 10。但是,这带来一个比较棘手的问题:这样的更改会对每条 SQL 语句都有裨益吗?

在 Oracle 数据库 11g 之前的版本中,我需要捕获所有 SQL 语句,通过跟踪运行这些语句,然后得到执行计划 — 这是一项极其耗时又极易出错的任务。有了新版本之后,我不需要再那样做了,我改用非常简单而有效的 SQL Performance Analyzer。

首先,为了举例说明,我们在数据库中运行以下查询:

select /**//* CONTROL_QUERY11 */
sum(QUANTITY_SOLD) from sales where PROMO_ID = 33;
select /**//* CONTROL_QUERY12 */
 sum(QUANTITY_SOLD) from sales where PROMO_ID = 350;
select /**//* CONTROL_QUERY13 */
sum(QUANTITY_SOLD) from sales where PROMO_ID = 351;
select /**//* CONTROL_QUERY14 */
sum(QUANTITY_SOLD) from sales where PROMO_ID = 534;
select /**//* CONTROL_QUERY15 */
sum(QUANTITY_SOLD) from sales where PROMO_ID = 999;

select /**//* CONTROL_QUERY21 */
sum(QUANTITY_SOLD) from sales where channel_id = 2;
select /**//* CONTROL_QUERY22 */
sum(QUANTITY_SOLD) from sales where channel_id = 3;
select /**//* CONTROL_QUERY23 */
sum(QUANTITY_SOLD) from sales where channel_id = 4;
select /**//* CONTROL_QUERY24 */
sum(QUANTITY_SOLD) from sales where channel_id = 5;
select /**//* CONTROL_QUERY25 */
sum(QUANTITY_SOLD) from sales where channel_id = 9;

假设这些查询由您的应用程序发出。通过调整 SQL 中的注释,您可以在以后对它们进行搜索。语句执行完成后,您可以对其使用 SPA。
用法
通常,最好通过 Oracle 企业管理器使用 SPA 功能。(当然,您也可以通过系统提供的程序包 dbms_sqlpa 使用命令行选项,但是不能超过企业管理器添加的可管理性值。)

执行以下步骤

  • 打开 Enterprise Manager Database Control 并单击 Performance 选项卡。然后滚动到页面底部,您将看到如下超链接。 

    图 1

  • 单击 Search Sessions,出现如下屏幕: 
    图 2
  • 从游标缓存中搜索已经执行的 SQL 中的模式。注意,这些 SQL 都有一个注释 CONTROL_QUERYn,其中 n 为 11、12 等等。输入该字符串作为搜索函数。将给出先前执行过的所有 SQL。在上面显示的屏幕中,您将看到标题为 Save to a new SQL Tuning Set 的单选按钮。选择该按钮,然后输入一个名为 CONTROL1 的 SQL 调整工具集。(注:为了举例说明,您要选择一些语句。)无需在 SQL 中加入任何注释,您只要创建一个“SQL 调整工具集”并填入所有相关语句即可。
  • 单击 SQL Tuning Sets,将出现 SQL Tuning Sets 页面。现在选择名为 CONTROL1 的 STS。在此页面中,您可以检查该 STS 并为其添加和删除 SQL。下面是该 STS 页面的屏幕截图: 
    图 3
  • 现在,从 Performance 页面中单击 SQL Performance Analyzer。出现如下所示的 SPA 主页面。 
    图 4
  •  
1 2 3 4
【内容导航】
第1页: SQL Performance Analyzer (SPA) 第2页: 定义SPA任务
第3页: 结果分析 第4页: 应用案例
©版权所有。未经许可,不得转载。
[责任编辑:ITPUB编辑]
[an error occurred while processing this directive]