ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 920的CBO还是不够'聪明'

920的CBO还是不够'聪明'

原创 Linux操作系统 作者:husthxd 时间:2005-02-27 00:00:00 0 删除 编辑

昨天客户报告说月结操作很慢,跟踪session发现很多表连接均为Hash join,FTS访问一张大表.
一个单位的月结平均需要12秒,把优化器模式变为rule后,优化器选择了正确的执行计划,一个单位的月结平均只需要2秒.对于上万个单位的月结,10秒的提高获取的收益是非常大的.


hp-ux 11.11
1g memory cpu x 2
oracle 9.2.0.6

http://www.itpub.net/325635.html


yangtingkun:

你如何收集的统计信息?

呵呵,我觉得还是不要对CBO期望的太高。

husthxd:

对大表10%采样收集,对小表1均全表收集.
10g的cbo相对于9i有很大的进步.

winghong:

what is the "正确的执行计划" ? NL ?

husthxd:

我意思的'正确'执行计划是指远远优于cbo的执行计划.
1.选择了正确的驱动表
2.选择了nl join

biti:

不管cbo是不是聪明,在陈述这个问题的时候,我觉得应该交代几个问题:

1:sql
2:相关数据分布/数据量/满足条件数据量 和返回数据量
3:分析方式(是否分析索引和其column histograms)
4:好执行计划是什么,不好执行计划是什么

在这些基础上,可以尝试一下 CBO 下的 10053 trace 看看成本分别如何计算的

如果你只是告诉大家一个 cbo 不够聪明,对大家没多大的价值,因为可能有更多的人发现他们的cbo还是蛮聪明的。而这种问题只能 case by case ,不能一概而论。

husthxd:

sql语句如下:
SELECT SUM(NVL(A.JCYLJ,0)), SUM(NVL(A.GDXYLJ,0)), SUM(NVL(A.GRZHYLJ,0)),
SUM(NVL(A.HLF,0)), SUM(NVL(A.DFBCLXDY,0)), SUM(NVL(A.HYGDXBT,0)),
SUM(NVL(A.DYZE,0))
INTO v_JCYLJ_ZJ, v_GDXYLJ_ZJ, v_GRZHYLJ_ZJ,
v_HLF_ZJ, v_DFBCLXDY_ZJ, v_HYGDXBT_ZJ, v_HJ_ZJ
FROM A, B, C
WHERE A.GRBH = B.GRBH AND
A.GRBH = C.GRBH AND
C.DWBH = :b1 AND
B.JZSJ = :b2 AND
B.YWZJBZ = '2';

表/索引均有统计数据,但没有column histograms.
TABLE_A大概有80万条记录
TABLE_B大概有40万条记录
VIEW_C大概有70万条记录
1.B.JZSJ和B.YWZJBZ的选择性不高,在B.JZSJ和B.YWZJBZ上建立索引并不合适.
2.C上的C.DWBH有很高的选择性,在C.DWBH 上有索引.
期望的访问方式为以VIEW_C为驱动表与A连接,然后在与B连接.
当时没有把执行计划copy下来,大体如下:

cost优化器模式:
执行计划为
首先TABLE_B与TABLE_A采用NL join连接,驱动表为TABLE_B,TABLE_B的访问方式为全表扫描.然后与VIEW_C连接,方式为hash join.

rule优化模式:
执行计划为
VIEW_C与TABLE_A采用NL join连接,驱动表为"VIEW_C",使用了C.DWBH上的索引.然后与TABLE_B连接,连接方式为nl join.
真是期望的访问方式.

由于存储过程是其他开发商开发的,由于存在很多复杂的因素,sql的修改基本上是不可能的.

seth:

10%少点了,试一下30%-50%,毕竟才几十万的记录。

yangtingkun:

如果可能试试收集一下被索引列的信息。

biti:

rule base 下如果走nl 则 from 后面最末尾的表作为驱动表,所以,不能说rule聪明,是碰巧还是故意放后面的?

由于正好版本是920,又还使用了绑定变量,所以问题倒还复杂了起来,执行计划控制反而困难了,确信c表满足条件记录少则使用hints为好,但既然已经不可能修改,则也许分析 hisgrams 可以带来好处,利用 *窥视* 功能。

husthxd:

不能说rule聪明,是碰巧还是故意放后面的
hehe,这个我可以确认的是碰巧的
因为原来的数据库版本是901,优化器模式为cost.
升级到920后反而导致程序运行变慢,由于不能修改程序,只得走回头路,使用rule模式.

btw:尝试说服客户修改程序.毕竟在920还使用rule感觉总觉得不爽

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/6906/viewspace-21735/,如需转载,请注明出处,否则将追究法律责任。

下一篇: 模式与XP
请登录后发表评论 登录
全部评论
长期从事政务、金融等行业产品研发和架构设计工作,ITPUB数据库版块资深版主,对Oracle、PostgreSQL有深入研究。现就职于广州云图数据技术有限公司,系统架构师。

注册时间:2007-12-28

  • 博文量
    1268
  • 访问量
    3745497