ITPUB论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 20688|回复: 53

一个很奇怪的问题,分析数据会影响Oracle使用RBO的判断? [复制链接]

版主

版主

精华贴数
57
技术积分
51713
社区积分
3825
注册时间
2002-5-26
论坛徽章:
76
授权会员
日期:2005-10-30 17:05:33复活蛋
日期:2011-05-31 16:00:07ITPUB官方微博粉丝徽章
日期:2011-06-28 19:45:36ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20现任管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:41:01
发表于 2005-1-4 15:21:24 |显示全部楼层
今天,现场人员报告说,历史查询服务器很慢,一样的SQL放到主库中运行比转发到历史查询库上要快很多。

于是要来SQL,在两个库中分别查看执行计划。
select /*+rule*/ cola,colb
from tablea
where  colc in (....)
and cold >= 111 and cold <=222;

主库中是使用了cold上的索引,而历史库中则使用了全表扫描,这是导致查询速度差异的原因。

但是问题是,仔细检查了两个库中的表,所有的列定义,索引定义,分区定义都是一样的,而且由于SQL中明确指定了/*+RULE*/的提示,所以也排除了数据在两个库中分布不一样的问题。

cold是表的PK中的第一个字段。

以下所有的操作都是在历史库中进行的:
1。去除了/*+RULE*/提示,改用FIRST_ROWS,执行计划没有变化,仍然使用了全表扫描,改为/*+use_index(table,index)*/,仍然全表扫描。

2。作了一次25%的estimate,使用FIRST_ROWS,执行计划改变为使用正确的索引了。但是/*+RULE*/和/*+use_index(table,index)*/仍然全表扫描

3。作100053的trace,奇怪的问题出现了,居然udump目录中不生成任何trace文件。
alter session set events '10053 trace name context forever, level 1';
explain plan for ...
alter session set events '10053 trace name context off';

4。于是禁用主键,同时删除了index,然后重新启用主键,此时unique index自动创建了。再次查看执行计划,全部正常了。

5。用dbms_stats包gather_table_stats,重新执行SQL,发现又再次变为全表扫描

6。用dbms_stats包delete_table_stats之后重新开始使用索引。

至此基本上明白是统计信息的收集导致了在使用/*+RULE*/时,SQL没有正确地遵守RBO的规则。
奇怪的问题。

100053没有trace生成也是奇怪的问题。

数据库 是8174
optimizer_mode设置为first_rows

注册会员

喝一杯咖啡~~

精华贴数
0
技术积分
4468
社区积分
3
注册时间
2004-8-19
论坛徽章:
2
授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34
发表于 2005-1-4 15:38:07 |显示全部楼层
你有沒有試過用alter session set OPTIMIZER_MODE=ture?
然後用select cola,colb
from tablea
where colc in (....)
and cold >= 111 and cold <=222;
?

使用道具 举报

注册会员

┖ 選擇離開 ┐

精华贴数
0
技术积分
524
社区积分
68
注册时间
2001-12-30
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
发表于 2005-1-4 15:39:30 |显示全部楼层
是不是就是/*+RULE*/ 的 HINTS没起作用?
817在+后面还需要空格吧,有吗?

以前发现过,在有的时候确实HINTS不起作用。

使用道具 举报

版主

斧头帮帮主

精华贴数
2
技术积分
11915
社区积分
5015
注册时间
2002-1-20
论坛徽章:
64
版主1段
日期:2012-05-15 15:24:112011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:41:012011新春纪念徽章
日期:2011-01-04 10:37:342010广州亚运会纪念徽章:手球
日期:2010-10-26 04:36:23ITPUB9周年纪念徽章
日期:2010-10-08 09:28:532010广州亚运会纪念徽章:田径
日期:2010-09-30 07:32:402010数据库技术大会纪念徽章
日期:2010-05-13 09:34:232010年世界杯参赛球队:澳大利亚
日期:2010-04-27 11:33:542010年世界杯参赛球队:瑞士
日期:2010-03-06 09:34:322010新春纪念徽章
日期:2010-03-01 11:04:592010年世界杯参赛球队:意大利
日期:2010-02-26 11:07:14
发表于 2005-1-4 15:43:19 |显示全部楼层
alter session set events '10053 trace name context forever, level 1';
explain plan for ...
alter session set events '10053 trace name context off';
10053只适用于cbo,rbo的情况下不会产生trace文件


5。用dbms_stats包gather_table_stats,重新执行SQL,发现又再次变为全表扫描
6。用dbms_stats包delete_table_stats之后重新开始使用索引。

就很奇怪。

使用道具 举报

版主

斧头帮帮主

精华贴数
2
技术积分
11915
社区积分
5015
注册时间
2002-1-20
论坛徽章:
64
版主1段
日期:2012-05-15 15:24:112011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:41:012011新春纪念徽章
日期:2011-01-04 10:37:342010广州亚运会纪念徽章:手球
日期:2010-10-26 04:36:23ITPUB9周年纪念徽章
日期:2010-10-08 09:28:532010广州亚运会纪念徽章:田径
日期:2010-09-30 07:32:402010数据库技术大会纪念徽章
日期:2010-05-13 09:34:232010年世界杯参赛球队:澳大利亚
日期:2010-04-27 11:33:542010年世界杯参赛球队:瑞士
日期:2010-03-06 09:34:322010新春纪念徽章
日期:2010-03-01 11:04:592010年世界杯参赛球队:意大利
日期:2010-02-26 11:07:14
发表于 2005-1-4 15:45:55 |显示全部楼层
最初由 abcd 发布
[B]是不是就是/*+RULE*/ 的 HINTS没起作用?
817在+后面还需要空格吧,有吗?

以前发现过,在有的时候确实HINTS不起作用。 [/B]


似乎不加空格也可以。 注意  Optimizer=HINT: RULE


Connected to:
Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production
With the Partitioning option
JServer Release 8.1.7.0.0 - Production

SQL> set atuottrace on
SP2-0158: unknown SET option "atuottrace"
SQL> set autotrace on
SQL> select /*+ rule */ count(*) from t;
Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=HINT: RULE
   1    0   SORT (AGGREGATE)
   2    1     TABLE ACCESS (FULL) OF 'T'


SQL> select /*+rule*/ count(*) from t;

Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=HINT: RULE
   1    0   SORT (AGGREGATE)
   2    1     TABLE ACCESS (FULL) OF 'T'


SQL> select /*+rule */ count(*) from t;

Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=HINT: RULE
   1    0   SORT (AGGREGATE)
   2    1     TABLE ACCESS (FULL) OF 'T'


SQL> select /*+ rule*/ count(*) from t;

Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=HINT: RULE
   1    0   SORT (AGGREGATE)
   2    1     TABLE ACCESS (FULL) OF 'T'

使用道具 举报

版主

版主

精华贴数
14
技术积分
51618
社区积分
3320
注册时间
2001-12-29
论坛徽章:
213
BLOG每日发帖之星
日期:2010-02-11 01:01:06紫蛋头
日期:2012-05-15 14:58:09咸鸭蛋
日期:2012-04-19 16:07:53灰彻蛋
日期:2012-02-02 17:30:18迷宫蛋
日期:2012-03-09 12:12:06蛋疼蛋
日期:2011-08-25 16:17:18蜘蛛蛋
日期:2011-05-10 13:07:01茶鸡蛋
日期:2011-05-10 13:05:16现任管理团队成员
日期:2011-05-07 01:45:08ITPUB年度最佳版主
日期:2011-04-08 18:37:09ITPUB年度最佳BLOG写作奖
日期:2012-03-13 17:09:53ITPUB技术丛书作者
日期:2010-09-26 15:24:56
发表于 2005-1-4 15:47:09 |显示全部楼层
analyze是否产生同样的影响?

使用道具 举报

版主

顾三

精华贴数
16
技术积分
29099
社区积分
6701
注册时间
2001-12-22
论坛徽章:
49
版主2段
日期:2012-05-15 15:24:11
发表于 2005-1-4 15:56:02 |显示全部楼层
把索引重建一下,再把表重新分析一下看看呢

使用道具 举报

版主

版主

精华贴数
57
技术积分
51713
社区积分
3825
注册时间
2002-5-26
论坛徽章:
76
授权会员
日期:2005-10-30 17:05:33复活蛋
日期:2011-05-31 16:00:07ITPUB官方微博粉丝徽章
日期:2011-06-28 19:45:36ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20现任管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:41:01
发表于 2005-1-4 16:38:43 |显示全部楼层
MD,现在可以作trace了,莫名其妙

.full是在作了分析以后,再抓取SQL执行计划的trace文件
.indx是在删除了分析数据以后,再抓取SQL执行计划的trace文件


重新上传了

trace.rar

4.16 KB, 下载次数: 62

使用道具 举报

注册会员

缥缈游侠

精华贴数
4
技术积分
3672
社区积分
51
注册时间
2004-8-5
论坛徽章:
0
发表于 2005-1-4 16:45:59 |显示全部楼层
附件有问题,无法下载

使用道具 举报

版主

版主

精华贴数
57
技术积分
51713
社区积分
3825
注册时间
2002-5-26
论坛徽章:
76
授权会员
日期:2005-10-30 17:05:33复活蛋
日期:2011-05-31 16:00:07ITPUB官方微博粉丝徽章
日期:2011-06-28 19:45:36ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20现任管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:41:01
发表于 2005-1-4 16:48:16 |显示全部楼层
最初由 yangtingkun 发布
[B]analyze是否产生同样的影响? [/B]


同样的影响

使用道具 举报

相关内容推荐
您需要登录后才可以回帖 登录 | 注册

TOP技术积分榜 社区积分榜 徽章 电子杂志 团队 统计 邮箱 虎吧 老博客 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档 | IT博客
CopyRight 1999-2011 itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有 联系我们 网站律师 隐私政策 知识产权声明
京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001 广播电视节目制作经营许可证:编号(京)字第1149号
  
回顶部