首页 理论教育数据库性能管理与调优-优化器提示方法

数据库性能管理与调优-优化器提示方法

【摘要】:在制定由优化器执行的SQL语句的执行计划过程中,提示为用户提供了可直接进行介入的方法。提示是用户对优化器下达的指示,但优化器可能会忽略不合理的提示。意味着除了RULE和DRIVING_SITE外的所有提示将选择CBO用作优化器。使用Orange Template Browser查看优化器提示如图2-8所示。图2-8Orange Template Browser查看优化器提示单击方框部分图标()、单击最顶端菜单的[View]—[Template Browser]或按快捷键 Alt+F2则会运行[Template Browser]。

优化器因各种限制制定无效执行计划,或主要由更了解实际数据特点和应用程序用途的用户进行分析和判断,为制定更优化的执行计划而引导优化器时使用提示(HINT)。在制定由优化器执行的SQL语句的执行计划过程中,提示为用户提供了可直接进行介入的方法。

1)使用提示的原因

(1)优化器选择与预期路径不同的执行路径而影响性能时,为引导正确的路径而使用提示。

(2)校正应用的优化器模式、数据访问方法、连接方法以及顺序等。

注意:提示只影响SQL的处理路径,不会影响SQL的结果。提示是用户对优化器下达的指示,但优化器可能会忽略不合理的提示。

2)忽略提示时的情形

(1)语法错误(syntactic)—被识别成 comment(注释)而忽略。

(2)逻辑错误(semantic) :

①请求的访问与其他提示冲突或语法处理不合理时;

②请求使用前导列不使用的索引

③在包含仅在CBO运行的功能的SQL上使用RULE提示;

④在查找已指定分区、并行处理选项的表时,即使要使用RULE优化器还是会使用CBO。

3)提示的使用方法

(1)提示在SELECT语句后以/*+提示区分 */的方式使用。

(2)意味着除了RULE和DRIVING_SITE外的所有提示将选择CBO用作优化器。无统计资料下使用HINT时应慎重。

(3)已指定 ALIAS(别名)的表名必须使用 ALIAS(别名)。

(4)若提示无效,则要检查 SQL处理机制是否请求不可用的路径。

参考以下例子:

如果按上述方法运行查询,则会执行FULL TABLE扫描。反之,如果按下述方法使用提示,则可以修改为使用emp表的pk扫描索引。

在最新版Oracle中两种情况都会执行索引扫描。以上例子是笔者为介绍提示而制定的执行计划。

4)常用的提示语句

常用提示语句如图2-7所示。

图2-7 提示语句

(1) OPTIMIZATION GOAL。

ALL_ROWS:以整个范围的处理速度为标准制定执行计划(连接时通常选择HASH JOIN)。

FIRST_ROWS:以部分速度处理为标准确立执行计划(连接时通常选择NESTED LOOP JOIN)。

CHOOSE:有ANALYZE信息时使用CBO,否则使用RBO处理。

RULE:通过SQL syntax制定执行计划。

(2) JOIN ORDER。(www.chuimin.cn)

ORDERED:按FROM子句中所列的表顺的序连接。

STAR:先连接 dimensional table后连接 FACT table。

(3) PARALLEL EXECUTION。

PARALLEL (table, degree):访问特定表时使用的并行处理进程数。

NOPARALLEL (table table … ):访 问特定表时请勿并行处理 。

(4) ACCESS METHOD。

FULL (table):全局扫描对象表。

INDEX (table index):访问特定表时使用的索引定义。

INDEX_DESC (table index):扫描索引时按倒序进行。

INDEX_FFS (table index):全局扫描索 引时 。

USE_CONCAT:有OR条件语句时分为两个以上的SQL语句并CONCATENATION(串联)结果。

NO_EXPAND:有OR条件语句时,请勿分开运行SQL语句。

(5) JOIN OPERATION。

USE_NL (table table … ):按顺序列 出执行 NESTED LOOP JOIN的表 ,与“ordered”一起使用。

USE_HASH (table table … ):按顺序列出执行 HASH JOIN的表,与“ordered”一起使用。

USE_MERGE (table table … ):按顺序列出执行 SORT MERGE JOIN的表,与“ordered”一起使用。

HASH_AJ / MERGE_AJ:使用 NOT IN子查询时请执行 HASH ANTI JOIN。

HASH_SJ / MERGE_SJ:使用EXISTS子查询时请执行HASH SEMI JOIN。

MERGE (table):如果Inline View中的表条件还存在于MAIN QUERY中,请进行合并处理。

NOMERGE (table):如果Inline View中的表条件还存在于MAIN QUERY中,请进行合并处理。

PUSH_SUBQ:访问特定表时如果有相关的子查询,请务必执行后再与表连接。

使用Orange Template Browser查看优化器提示如图2-8所示。

图2-8 Orange Template Browser查看优化器提示

单击方框部分图标()、单击最顶端菜单的[View]—[Template Browser]或按快捷键 Alt+F2则会运行[Template Browser]。 [Template Browser]将以树的形式对DML 、DDL 、PL/SQL 、PL/SQL control structure、Pseudo column、SQL function、SQL optimizer hint的目录进行排序,使用户创建指令时可以轻松使用指令规则。双击所选指令时,SQL Tool的 editor窗口中将生成 template。此外,单击该项目时将在底部的 comment选项卡中显示该项目的说明和事例,任何人都可以轻松使用函数和指令。而且[Template Browser]可以单独创建窗口,创建SQL时可以帮助用户方便快捷的进行操作。

(6) stats manager。 stats manager 工具(图2-9)可以帮助用户轻松生成表、索引、簇等段对象的统计信息,可按多种选项设置统计信息生成对象的选择和方法。而且 stats manager提供有DBMS_ STATS方法和ANALYZE方法,操作时DBMS_ STATS可将table、index、column、schema、database用作对象,ANALYZE 可将 table、index 用作对象。此外,可以不立即生成统计信息,只生成script作为参考资料使用。

图 2-9 Stats Manager工具

【注释】

[1]access method作为数据 access的方式,表示 INDEX ACCESS或 FULL-TABLE SCAN ACCESS, join method作为优化器的选择的方式,表示 NESTED LOOP、SORT MERGE、HASH JOIN等。