关于oracle 10g中参数optimizer_mode的测试|Oracle Oracle基础 TTTBLOG

Allen at 2010-03-24 13:02:53 5748 0 0 0 0
#0. (Normal)

 关于oracle 10g中参数optimizer_mode的测试

 
今天,在资料上看到如下内容:



感到很疑惑:真的是这样么,10g中的rule和choose是无效的选项?

但我测试时,也能设置choose啊,而且执行计划和all_Rows确实不一样啊!

问了一下网上的朋友,又作了些测试如下,结果也在下面:


C:Documents and SettingsAdministrator>sqlplus system/manager

SQL*Plus: Release 10.2.0.1.- Production on 星期五 3月 19 14:06:01 2010

Copyright (c) 1982, 2005, Oracle. All rights reserved.


连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.- Production
With the Partitioning, OLAP and Data Mining options

SQL> show parameter optimizer_mode

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
optimizer_mode string ALL_ROWS

SQL> alter session set optimizer_mode=rule;

会话已更改。

SQL> show parameter optimizer_mode

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
optimizer_mode string RULE

SQL> set autotrace on

SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.- Prod
PL/SQL Release 10.2.0.1.- Production
CORE 10.2.0.1.0 Production
TNS for 32-bit Windows: Version 10.2.0.1.- Production
NLSRTL Version 10.2.0.1.- Production


执行计划
----------------------------------------------------------
Plan hash value: 1078166315

--------------------------------------
| Id | Operation | Name |
--------------------------------------
| 0 | SELECT STATEMENT | |
|* 1 | FIXED TABLE FULL| X$VERSION |
--------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter("INST_ID"=USERENV('INSTANCE'))

Note
-----
   - rule based optimizer used (consider using cbo) --Oracle给出的提示


统计信息
----------------------------------------------------------
          8 recursive calls
          0 db block gets
          2 consistent gets
          0 physical reads
          0 redo size
        680 bytes sent via SQL*Net to client
        385 bytes received via SQL*Net from client
          2 SQL*Net roundtrips to/from client
          0 sorts (memory)
          0 sorts (disk)
          5 rows processed

SQL> alter session set optimizer_mode=chooose;

ERROR:
ORA-00096: 值 CHOOOSE 对参数 optimizer_mode 无效, 它必须来自 first_rows_1000,
first_rows_100, first_rows_10, first_rows_1, first_rows, all_rows, choose, rule
之间

-->一次错误输入,得到了参数的选项值

SQL> alter session set optimizer_mode=choose;

会话已更改。

SQL> show parameter optimizer_mode

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
optimizer_mode string CHOOSE
SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.- Prod
PL/SQL Release 10.2.0.1.- Production
CORE 10.2.0.1.0 Production
TNS for 32-bit Windows: Version 10.2.0.1.- Production
NLSRTL Version 10.2.0.1.- Production


执行计划
----------------------------------------------------------
Plan hash value: 1078166315

--------------------------------------
| Id | Operation | Name |
--------------------------------------
| 0 | SELECT STATEMENT | |
|* 1 | FIXED TABLE FULL| X$VERSION |
--------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter("INST_ID"=USERENV('INSTANCE'))

Note
-----
   - rule based optimizer used (consider using cbo) --Oracle给出的提示


统计信息
---------------------------
【版权声明】
本文为原创,遵循CC 4.0 BY-SA版权协议!转载请附上原文出处链接及本声明。
原文链接:https://tdlib.com/am.php?t=0ax7VcQzsLZ9

Tag:   Oracle   Oracle基础   TTTBLOG
未登录,请先 [ 注册 ] or [ 登录 ]
(一分钟即可完成注册!)