2024年4月1日发(作者:)

5. 优化

要优化你程序单元里的 SQL 语句,Oracle 的解释计划工具能对显示语句的运行路径有很大的帮助,因此

它被集成在 PL/SQL Developer 的 IDE 里。

要查看 SQL 语句或 PL/SQL 程序单元实际源的使用情况, PL/SQL Developer 能够显示关于它运行情况的

统计表。你可以配置你希望显示的统计表,并且能包括耗时、CPU 时间、逻辑读、物理读、物理写等等。

要确定每一个单独的 PL/SQL 代码行的运行时间,你可以使用 PL/SQL 概览图。这个特性对于 Oracle 8.0

或更早版本是不可用的。

最后,通过激活 SQL 跟踪,你可以使用 Oracle 的 tkprof 工具来获得程序单元里关于所有已运行的 SQL

语句的资源的使用信息。

5.1 使用解释计划窗口

要使用 Oracle 的解释计划工具,请按工具栏里的新建按钮,选择解释计划窗口。此时一个空的解释计划

窗口就显示出来了。在窗口的上半部,你可以键入你希望分析的 SQL 语句。在按了工具栏里的执行按钮后,

运行计划就被显示在窗口的下半部:

你现在可以改变 SQL 语句,再按执行按钮看看这个改变的效果。要了解关于解释计划的更多信息,你可以

阅读 Oracle 服务器调整手册。

要看查询计划里各种优化器目标的效果,请选择优化器目标列表里相应的条目,这个计划将立即被更新到

反映这些改变上。

使用第一个、下一个、上一个和最近操作按钮操纵查询计划的操作顺序。计划已经被确定后,第一个操作

将高亮显示。

解释计划工具使用所谓的计划表来储存运行计划。如果这个表对当前用户不可用, PL/SQL Developer 将

问你是否要在当前用户的计划里创建这个表。要定义哪几个列来自于你要看的计划表,是什么顺序,请按

首选项按钮,这将调出首选项页(请看第 16.21 章)。

注:如果你用的是 Oracle 服务器 7.2 或更早版本,耗费与基数在计划表里不可用。如果你用的是 Oracle

服务器 7.3 或更高版本而耗费与基数不被显示,你大概需要更新计划表。

如果你右击对象名列,这将为已选对象调出弹出式菜单。

在程序单元里分析 SQL 语句

大多数时间里,你希望分析的 SQL 语句都被包含在程序单元的源里。要做这个,你可以选择程序编辑器里

的 SQL 语句并且选择来自于帮助菜单的解释计划(或按 F5),一个新的解释计划窗口将为已选的 SQL 语

句创建,而且所有的 PL/SQL 变量就会被绑定变量替换掉。

如果你明确地复制和粘贴一个来自于程序单元包含 PL/SQL 变量的 SQL 语句并且执行解释计划窗口,你会

收到一个"ORA-00904:列名无效"的错误,解释计划工具错误地把这些变量都当成了列,因此每一个变量都

必须加上一个冒号前缀。如果我们已经要求分析 me 函数里的 SQL 语句,则 result 与

p_empno 变量肯定会按如下被改变:

现在解释计划工具知道了哪一个标识符是列、哪个标识符是 PL/SQL 变量

5.2 自动统计

当你在 SQL 窗口或者测试窗口执行语句时, PL/SQL Developer 将自动地生成一个此执行的统计报告。有

一个条件是你必须在动态性能表 v$session, 、v$statname 与 v$sesstat 里有 select 权限(这些表通

过标准的 plustrace 角色提供)。

你可以通过改变到 SQL 窗口或测试窗口顶部的统计表标签来查看统计报告。用于 me 函

数运行的统计表可能显示如下: