让我们快速浏览一下这个过程:
- 捕捉一个SQL调整工具集。这是一个从数据库控制台进行的一个步骤。在我后面的例子里,我告诉它去捕捉用户FLOWS_030000在之后的两分钟执行的所有SQL。然后我运行Application Express builder来生成SQL。
- 运行SQL Performance Analyzer “Guided Workflow”向导:
- 第一次替换SQL调整工具集。
- 改变一些参数或数据结构。
- 第二次替换SQL调整工具集。
- 比较这两个调整工具集并存储结果。
- 查看这个结果,包括改进或退后的SQL,以及改变了的所有SQL计划。
示例
这是一个例子,我们来看看改变OPTIMIZER_INDEX_COST_ADJ和OPTIMIZER_INDEX_CACHING 的影响。正如我先前所提到的,我们要使用的调整工具集是用户FLOWS_030000执行的SQL,所以这不是测试这个改变对整个数据库的影响,但是你可 以捕捉整个数据库的调整工具集来测试这个影响。这里不会进行向导的所有5个步骤,因为没有那么多要看的。我会解释整个过程,包括捕捉SQL调整工具集,这 只需要5分钟。
要从11g数据库控制台里到SQL Performance Analyzer,点击Performance标签,然后点击右下角的SQL Performance Analyzer,之后再点击Guided Workflow。下面是Guided Workflow 向导的一个截屏:
在开始第二步之前,运行下面的代码:
图2
在开始第三步之前,运行下面的代码:
图3
下面是结果的截屏。注意这379条SQL语句中,147条有错误。这是由于在APEX 中的DML操作,所以在这不是问题,但是这是一个要注意的地方。还要注意有78%的改进作用和0%的衰退影响。
让我们看一个SQL语句的细节以便我们可以看到在这个语句上的改变详情:
图5
最后,下面两个截屏是从一个改变了的SQL计划的细节得来的,显示了旧计划和新计划。
旧的计划:
图6
新的计划:
图7
正如你所看到的,新计划使用了一个索引,而旧计划没有。
过去,测试针对一条SQL语句的变更相对简单,但是测试300条以上的语句、或者是整个数据库中的每条语句,这几乎是不可能的。所以这是数据库 管理员和开发人员之类的人非常欢迎的一个特性。作为一个开发人员,你可以在你提出请求之前,测试任何你希望你的数据库管理员要做的性能变更。作为一个数据 库管理员,你可以在对产品做更改之前查看所有潜在的变更所带来的影响,这可以显著地降低风险。