`
niyanshi
  • 浏览: 19768 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

一次Oracle SQL优化的经验

阅读更多

前些时候候遇到一个SQL的性能问题,在解决过程里了解到了一些东西。有数据库表T,主键是列A, B, C, D, E。每天需要定时从上游数据库源取数据过来更新,大约10几万条。更新的操作过程是,对每条上游数据按几个关键字段在表T中进行删除操作。delete from T where B = ? and C=? and E = ?  然后再进行Insert操作。
       系统运行到三个多月的时候,遇到了问题。UAT环境(Oracle 10g)性能正常,10万条记录更新是10多分钟,Production环境(Oracle 9i,还没来得及升级), 有一天突然从10多分钟变成了一个小时,用户无法接受。首先确认了表的统计信息都是最新的,在分析查询计划后,发现性能下降主要由delete操作引起的,10g在优化中找到了索引,而9i在优化中用了CBO,全表扫描。试着改成强制使用RBO,还是没有用到索引。后来想到,可能是因为列A没有在where条件中,而我们除了主键以外,没有建另外的索引,所以聚集索引匹配的时候,第一个字段没有匹配上,就放弃使用索引了。而10g的优化器聪明一些,第一个列没找到后,还尝试了继续匹配。于是试着在where中加上A=?这人条件,再执行,果然用上索引了。由于A条件放在where中没什么意义,所以后来的解决办法是在区别度比较大的列C上单独加了一个索引,再执行时速度有明显提升,从一个小时回到了10多分钟。

       总结两点:
        1.Oracel不同版本的优化器智商有差距。
2.我们还是要尊重一般经验,在有只有主键聚集索引时, 至少把第一列作为的where里的条件。
        3.由于10g以后已经变聪明了,所以第二点无效,还是可以随便写写。

 

分享到:
评论

相关推荐

    ORACLE SQL性能优化

    第一次解析SQL之后, ORACLE将SQL语句存放在共享池中. ORACLE只对简单的表提供高速缓冲(cache buffering)这个功能并不适用于多表连接查询. 在数据高速缓冲区中存放着Oracle系统最近使用过的数据块(即用户的高速...

    ORACLE SQL性能优化系列

    为了不重复解析相同的SQL语句,在第一次解析之后, ORACLE将SQL语句存放在内存中.这块位于系统全局区域SGA(system global area)的共享池(shared buffer pool)中的内存可以被所有的数据库用户共享. 因此,当你执行一个...

    oracle_sql性能优化

    为了不重复解析相同的SQL语句,在第一次解析之后, ORACLE将SQL语句存放在内存中.这块位于系统全局区域SGA(system global area)的共享池(shared buffer pool)中的内存可以被所有的数据库用户共享. 因此,当你执行一个...

    收获不止SQL优化

    第2章 风驰电掣——有效缩短SQL优化过程 24 2.1 SQL调优时间都去哪儿了 25 2.1.1 不善于批处理频频忙交互 25 2.1.2 无法抓住主要矛盾瞎折腾 25 2.1.3 未能明确需求目标白费劲 26 2.1.4 没有分析操作难度乱调优...

    Oracle优化日记:一个金牌DBA的故事 白鳝.扫描版

    另外《Oracle优化日记:一个金牌DBA的故事》第一次详尽地披露了Oracle数据库内部存储结构,并公布了部分代码,对于有兴趣研究数据库内部存储结构或者编写dul工具的读者有一定的参考价值。《Oracle优化日记:一个金牌...

    oracle 数据库优化技术资料

    ORACLE采用一次读入多个数据块(database block)的方式优化全表扫描. b. 通过ROWID访问表 你可以采用基于ROWID的访问方式情况,提高访问表的效率, , ROWID包含了表中记录的物理位置信息..ORACLE采用索引(INDEX)...

    收获,不止SQL优化--抓住SQL的本质 ,梁敬彬 梁敬弘

    梁敬彬,福富研究院副理事长、公司四星级内训师。...著有多本畅销数据库技术书籍,其代表作《收获,不止Oracle》已成为数据库领域有口皆碑的经典书籍,《收获,不止SQL优化》即将开创一个新的里程碑。

    收获,不止SQL优化

    , 然而,SQL虽然实现简单可乐,却极易引发性能问题,那时广大SQL使用人员可要“愁”就一个字,心碎无数次了。, 缘何有性能问题?原因也一字概括:“量”。当系统数据量、并发访问量上去后,不良SQL就会拖跨整个系统...

    收获,不止SQL优化 PDF 带书签 第三部分

    随后《收获,不止SQL优化——抓住SQL的本质》指引大家学会等价改写、过程包优化、高级SQL、分析函数、需求优化这些相关的五大神功。有点头晕,能否少一点套路?淡定,这还是“术”的范畴,依然是教你如何解决问题,...

    Oracle优化53解

    为了不重复解析相同的SQL语句,在第一次解析之后, ORACLE将SQL语句存放在内存中。这块位于系统全局区域SGA(system global area)的共享池(shared buffer pool)中的内存可以被所有的数据库用户共享。 因此,当你...

    ORACLE+SQL性能优化系列

    常用的oracle优化,全表扫描就是顺序地访问表中每条记录. ORACLE采用一次读入多个数据块(database block)的方式优化全表扫描.

    如何用智能优化器提高Oracle的性能

    作为一个Oracle专业人员,你应该知道在SQL语句第一次进入库缓存时可能存在重大的启动延迟。但是聪明的Oracle DBA和开发人员能够改变表的搜索限制参数或者使用ordered提示来手工指定表的连接顺序,从而显著地减少优化...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    10.2 SQL优化 257 10.2.1 测试执行计划 257 10.2.2 跨多个执行的测试 260 10.2.3 测试查询改变的影响 263 10.2.4 寻找其他优化机会 266 10.2.5 将子查询因子化应用到PL/SQL中 270 10.3 递归子查询 273 ...

    收获,不止SQL优化--抓住SQL的本质

    资源名称:收获,不止SQL优化--抓住SQL的本质作者简介:梁敬彬,福富研究院副理事长、公司唯一四星级内训师。不仅是公司特级专家也是国内一线知名数据库专家,其个人及团队在数据库优化和培训领域有着丰富的经验、...

    Oracle语句优化30个规则详解

     为了不重复解析相同的SQL语句,在第一次解析之后, ORACLE将SQL语句存放在内存中。这块位于系统全局区域SGA(system global area)的共享池(shared buffer pool)中的内存可以被所有的数据库用户共享。 因此,当你...

    SQL性能优化

     以上四个SQL在ORACLE分析整理之后产生的结果及执行的时间是一样的,但是从ORACLE共享内存SGA的原理,可以得出ORACLE对每个SQL 都会对其进行一次分析,并且占用共享内存,如果将SQL的字符串及格式写得完全相同则...

    oracle sql tunning

    盖国强 的一次案例分析 是一次SQL优化分析的全过程,曾经在itpub上发过相关的帖子,现在整理了一下,添加了详细的说明,希望对大家有些帮助。

    《Oracle DBA手记——数据库诊断案例与性能优化实践》第一章 to be continued

    ├─第一篇 DBA工作手记 │ 01.Eygle的DBA工作手记 │ 02.Yangtingkun的DBA工作手记 │ 03.老熊的DBA手记 │ 04.BanPing的DBA工作手记 │ ├─第二篇 诊断案例篇 │ 01.ASM案例分析与诊断 ...一次排序的调整与优化

Global site tag (gtag.js) - Google Analytics