查看: 6799|回复: 13

outline 问题

[复制链接]
论坛徽章:
13
2010新春纪念徽章
日期:2010-01-04 08:33:082010年世界杯参赛球队:斯洛文尼亚
日期:2010-01-10 09:46:302010年世界杯参赛球队:意大利
日期:2010-01-26 18:39:032010年世界杯参赛球队:丹麦
日期:2010-03-18 15:34:462010年世界杯参赛球队:朝鲜
日期:2010-03-23 04:04:282010年世界杯参赛球队:葡萄牙
日期:2010-06-09 16:28:15IT宝贝
日期:2010-09-14 09:02:20ITPUB9周年纪念徽章
日期:2010-10-08 09:31:212011新春纪念徽章
日期:2011-02-18 11:42:47
发表于 2008-8-29 17:11 | 显示全部楼层 |阅读模式
SQL>  create outline ol_t1 for category cc on select count(*) from t1;
Outline created.
SQL> select count(*) from t1;
  COUNT(*)
----------
    314496

Execution Plan
----------------------------------------------------------
Plan hash value: 3693069535
-------------------------------------------------------------------
| Id  | Operation          | Name | Rows  | Cost (%CPU)| Time     |
-------------------------------------------------------------------
|   0 | SELECT STATEMENT   |      |     1 |   912   (1)| 00:00:11 |
|   1 |  SORT AGGREGATE    |      |     1 |            |          |
|   2 |   TABLE ACCESS FULL| T1   |   314K|   912   (1)| 00:00:11 |
-------------------------------------------------------------------
Note
-----
   - outline "OL_T1" used for this statement

Statistics
----------------------------------------------------------
         34  recursive calls
        147  db block gets
       4151  consistent gets
          0  physical reads
        576  redo size
        517  bytes sent via SQL*Net to client
        492  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          2  sorts (memory)
          0  sorts (disk)
          1  rows processed
SQL> create index ind_t1 on t1(object_id);
Index created.
SQL> alter session set use_stored_outlines=cc;
Session altered.
SQL> select count(*) from t1;
  COUNT(*)
----------
    314496

Execution Plan
----------------------------------------------------------
Plan hash value: 2450975207
------------------------------------------------------------------------
| Id  | Operation             | Name   | Rows  | Cost (%CPU)| Time     |
------------------------------------------------------------------------
|   0 | SELECT STATEMENT      |        |     1 |   159   (3)| 00:00:02 |
|   1 |  SORT AGGREGATE       |        |     1 |            |          |
|   2 |   INDEX FAST FULL SCAN| IND_T1 |   314K|   159   (3)| 00:00:02 |
------------------------------------------------------------------------
Note
-----
   - outline "OL_T1" used for this statement

Statistics
----------------------------------------------------------
          1  recursive calls
          0  db block gets
        709  consistent gets
        702  physical reads
          0  redo size
        517  bytes sent via SQL*Net to client
        492  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed


请问为啥2次执行用的一个Outline ,执行计划确不同呢?而且从outln.ol$hints看,ol_t1就是全表扫描,为啥第二次就走了索引呢?

SQL> L
  1* select OL_NAME,CATEGORY, HINT_TEXT from outln.ol$hints where ol_name='OL_T1'
SQL> /
OL_NAME    CATEGORY   HINT_TEXT
---------- ---------- ----------------------------------------------------------------------
OL_T1      CC         FULL(@"SEL$1" [email=]"T1"@"SEL$1[/email]")
OL_T1      CC         OUTLINE_LEAF(@"SEL$1")
OL_T1      CC         ALL_ROWS
OL_T1      CC         OPT_PARAM('optimizer_dynamic_sampling' 0)
OL_T1      CC         OPTIMIZER_FEATURES_ENABLE('10.2.0.4')
OL_T1      CC         IGNORE_OPTIM_EMBEDDED_HINTS
论坛徽章:
17
授权会员
日期:2008-08-18 15:32:56阿斯顿马丁
日期:2013-07-29 18:48:42蛋疼蛋
日期:2013-05-21 11:22:192012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41SQL大赛参与纪念
日期:2011-04-13 12:08:172011新春纪念徽章
日期:2011-03-21 14:26:302011新春纪念徽章
日期:2011-02-18 11:42:47ITPUB9周年纪念徽章
日期:2010-10-08 09:28:522010年世界杯参赛球队:塞尔维亚
日期:2010-01-07 09:54:43
发表于 2008-8-29 17:18 | 显示全部楼层

OUTLINE只是希望ORA按你的计划去执行

但当ORACLE发现现有系统有更有效的路径时,会不按OUTLINE约定的去实现

使用道具 举报

回复
发表于 2008-8-29 17:20 | 显示全部楼层
学习了

使用道具 举报

回复
发表于 2008-8-29 17:20 | 显示全部楼层
原帖由 sqlanywhere 于 2008-8-29 17:18 发表
但当ORACLE发现现有系统有更有效的路径时,会不按OUTLINE约定的去实现

那OUTLINE的主要作用是啥,不就是固定执行计划吗?

使用道具 举报

回复
论坛徽章:
13
2010新春纪念徽章
日期:2010-01-04 08:33:082010年世界杯参赛球队:斯洛文尼亚
日期:2010-01-10 09:46:302010年世界杯参赛球队:意大利
日期:2010-01-26 18:39:032010年世界杯参赛球队:丹麦
日期:2010-03-18 15:34:462010年世界杯参赛球队:朝鲜
日期:2010-03-23 04:04:282010年世界杯参赛球队:葡萄牙
日期:2010-06-09 16:28:15IT宝贝
日期:2010-09-14 09:02:20ITPUB9周年纪念徽章
日期:2010-10-08 09:31:212011新春纪念徽章
日期:2011-02-18 11:42:47
 楼主| 发表于 2008-8-29 17:25 | 显示全部楼层
原帖由 sqlanywhere 于 2008-8-29 17:18 发表
但当ORACLE发现现有系统有更有效的路径时,会不按OUTLINE约定的去实现


are you sure?
问题是如果oracle认为的执行计划不是很有效,怎么办?

使用道具 举报

回复
论坛徽章:
17
授权会员
日期:2008-08-18 15:32:56阿斯顿马丁
日期:2013-07-29 18:48:42蛋疼蛋
日期:2013-05-21 11:22:192012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41SQL大赛参与纪念
日期:2011-04-13 12:08:172011新春纪念徽章
日期:2011-03-21 14:26:302011新春纪念徽章
日期:2011-02-18 11:42:47ITPUB9周年纪念徽章
日期:2010-10-08 09:28:522010年世界杯参赛球队:塞尔维亚
日期:2010-01-07 09:54:43
发表于 2008-8-29 17:32 | 显示全部楼层

OUTLINE应用情况之一

开发环境与生产环境基本一致,包括硬件,软件,表,用户,等等
当在开发环境调整为最优的时候,做一个OUTLINE,直接应用到生产里,就不用再考虑tuning了

使用道具 举报

回复
论坛徽章:
13
2010新春纪念徽章
日期:2010-01-04 08:33:082010年世界杯参赛球队:斯洛文尼亚
日期:2010-01-10 09:46:302010年世界杯参赛球队:意大利
日期:2010-01-26 18:39:032010年世界杯参赛球队:丹麦
日期:2010-03-18 15:34:462010年世界杯参赛球队:朝鲜
日期:2010-03-23 04:04:282010年世界杯参赛球队:葡萄牙
日期:2010-06-09 16:28:15IT宝贝
日期:2010-09-14 09:02:20ITPUB9周年纪念徽章
日期:2010-10-08 09:31:212011新春纪念徽章
日期:2011-02-18 11:42:47
 楼主| 发表于 2008-8-29 17:33 | 显示全部楼层
谢版主!

SQL> show parameter statistics_level

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
statistics_level                     string      TYPICAL

SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
PL/SQL Release 10.2.0.4.0 - Production
CORE    10.2.0.4.0      Production
TNS for Solaris: Version 10.2.0.4.0 - Production
NLSRTL Version 10.2.0.4.0 - Production

使用道具 举报

回复
论坛徽章:
17
授权会员
日期:2008-08-18 15:32:56阿斯顿马丁
日期:2013-07-29 18:48:42蛋疼蛋
日期:2013-05-21 11:22:192012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41SQL大赛参与纪念
日期:2011-04-13 12:08:172011新春纪念徽章
日期:2011-03-21 14:26:302011新春纪念徽章
日期:2011-02-18 11:42:47ITPUB9周年纪念徽章
日期:2010-10-08 09:28:522010年世界杯参赛球队:塞尔维亚
日期:2010-01-07 09:54:43
发表于 2008-8-29 17:55 | 显示全部楼层

up

关注......

使用道具 举报

回复
论坛徽章:
18
ITPUB元老
日期:2005-02-28 12:57:002010年世界杯参赛球队:南非
日期:2010-04-19 12:17:452010新春纪念徽章
日期:2010-03-01 11:05:01生肖徽章2007版:牛
日期:2009-11-02 17:04:55祖国60周年纪念徽章
日期:2009-10-09 08:28:00生肖徽章2007版:兔
日期:2008-09-22 19:33:40奥运会纪念徽章:蹦床
日期:2008-09-09 11:00:24奥运会纪念徽章:跳水
日期:2008-06-16 06:59:25ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44数据库板块每日发贴之星
日期:2007-10-08 01:03:42
发表于 2008-8-29 21:45 | 显示全部楼层
100% bug 没有workaround,除非drop索引

使用道具 举报

回复
发表于 2008-8-29 21:59 | 显示全部楼层
我觉得也是。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表