`
kavy
  • 浏览: 891297 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

oracle sql优化案例2(RBO下调整表连接的顺序) .

 
阅读更多

发现问题:

通过statspack(statspack的bug导致buffer gets为负值,部分top sql无法正确列出),经观察,由于两个数据库同在一台主机,c数据库也消耗了主机1/4的CPU资源,也存在着未优化的sql语句,具体如下:该语句从2012年1月13日凌晨开始出现,消耗了C数据库80%的资源,即整个主机15%的CPU。需要提前说明一,由于历史原因,该数据库使用RBO。

                                       CPU      Elapsd

  Buffer Gets   Executions  Gets per Exec  %Total Time (s)  Time (s) Hash Value

--------------------------- -------------- ------ -------- --------- ----------

  3,968,965,486          269  14,754,518.5   81.9 ########  36067.86  26012873

Module: JDBC ConnectClient

select distinct  a.transactionid, a.tansactioncode, a.brand,a.m

sisdn, a.new_msisdn,a.user_status, a.status_chg_time, a.status

_opr_time,a.create_time, a.rec_sts, '08' as src,b.BILL_FLG,b.SP

_ID,b.BIZ_CODE  from aicbs_usc_proc_batcha,aicbs_spu_biz_order

b  where a.msisdn = b.msisdn and rec_sts=:v0 andb.biz_type = :v

1 and b.STS  != 'D' and a.user_status!='05' order bya.create_ti

me asc

 优化方法:

调整表B和表A的顺序(具体如下),使oracleRBO优化器使用小表作为驱动表,经测试单个执行时间从120秒可以下降到1秒的时间,估计能使主机CPU利用率下降10%。

修改后的sql如下:

select distincta.transactionid,

                a.tansactioncode,

                a.brand,

                a.msisdn,

                a.new_msisdn,

                a.user_status,

                a.status_chg_time,

                a.status_opr_time,

                a.create_time,

                a.rec_sts,

                '08' as src,

                b.BILL_FLG,

                b.SP_ID,

                b.BIZ_CODE

  from aicbs_spu_biz_order b,aicbs_usc_proc_batch a,

where a.msisdn =b.msisdn

   and rec_sts = :v0

   and b.biz_type = :v1

   and b.STS != 'D'

   and a.user_status != '05'

order bya.create_time asc

原理补充:

基于规则的优化器(RBO)使用oracle内部的执行规则来确认sql的执行路径。另外,ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(我们称它为驱动表或基础表,drivingtable)将被最先处理. 在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.当ORACLE处理多个表时,会运用排序及合并的方式连接它们.首先,扫描第一个表(FROM子句中最后的那个表)并对记录进行排序,然后扫描第二个表(FROM子句中最后第二个表),最后将所有从第二个表中检索出的记录与第一个表中合适记录进行合并.

 

转自:http://blog.csdn.net/hijk139/article/details/7301277

分享到:
评论

相关推荐

    oracle sql优化100条

    以下将详细解读部分Oracle SQL优化原则,涵盖查询执行计划、表扫描方式、SQL语句优化及数据访问顺序等方面。 #### 1. 查询执行计划的选择模式 Oracle提供了三种查询执行计划选择模式:`RULE`(基于规则)、`COST`...

    ORACLE_SQL性能优化(全).ppt

    优化步骤包括定位问题SQL、检查执行计划、分析统计信息、调整索引、表分析和改写SQL。优化的目标是使SQL简单、易读、节省资源,避免死锁。 **6. SQL共享原理** Oracle的共享池机制允许所有用户共享已解析的SQL语句...

    ORACLESQL性能优化全PPT教案.pptx

    2. **执行计划分析**:通过EXPLAIN PLAN或V$SQL_PLAN视图,我们可以查看SQL语句的执行计划,了解数据库如何处理查询,包括表扫描方式(全表扫描或索引扫描)、连接顺序、排序操作等,这有助于找出性能瓶颈。...

    Oracle 高性能SQL优化(ppt)

    Oracle数据库的高性能SQL优化是确保系统高效运行的关键环节。SQL优化涉及多个层面,包括设计、开发、测试和运行维护阶段,旨在提高吞吐量,减少响应时间,以满足业务需求。 首先,Oracle性能管理分为主动和被动两种...

    Oracle 性能优化之 SQL优化

    2. **WHERE子句中的连接顺序** - Oracle采用自下而上的顺序解析WHERE子句,因此表之间的连接条件应当位于WHERE子句的前面,而过滤条件则应放在后面。这样可以最大限度地减少不必要的数据处理。 3. **SELECT子句...

    Oracle sql 性能优化调整

    Oracle SQL性能优化调整是数据库管理员和开发人员在日常工作中经常面临的重要任务,它涉及到数据库查询速度的提升,资源利用率的优化以及系统整体性能的改善。本文将深入探讨Oracle数据库SQL性能优化的关键点,并...

    ORACLE SQL性能优化规范

    根据表的大小和索引情况,调整表的连接顺序可能优化执行计划。 11. 使用DECODE函数来减少处理时间: DECODE函数可以避免IF-THEN-ELSE逻辑,简化查询,提高执行效率,尤其是在处理大量数据时。 总结,Oracle SQL...

    Oracle Sql 优化

    ### Oracle SQL 优化详解 #### 一、Oracle SQL优化的重要性 在系统开发初期,由于数据库数据量较小,可能不会明显感受到不同SQL语句编写方式带来的性能差异。然而,当系统投入实际应用,尤其是面对海量数据时,SQL...

    Oracle查询优化案例

    在这个"Oracle查询优化案例"中,我们将深入探讨如何通过各种方法提升SQL查询的效率,从而提高整体数据库系统的运行速度。以下是一些核心知识点: 1. **执行计划分析**:了解查询优化器如何选择执行计划至关重要。...

    Oracle 高性能SQL优化

    在Oracle中,SQL语句优化是性能管理的核心,主要目标包括避免全表扫描、有效利用缓存、优化索引使用、改进连接技术和检查子查询的效率。 在SQL优化的不同阶段,性能收益会有所不同。设计阶段的优化可以带来最大的...

    Oracle-SQL性能优化及案例分析.ppt

    如果连接操作成本高,可能需要调整连接顺序或考虑使用连接优化技术,如哈希连接或排序合并连接。 总之,Oracle SQL性能优化是一个涉及多方面因素的过程,需要对数据库结构、查询语法、优化器机制和工具使用有深入的...

    Oracle SQL性能优化技巧大总结

    ### Oracle SQL性能优化技巧大总结 #### 一、选择最有效率的表名顺序 **背景**:在基于规则的优化器(RBO)中,Oracle解析器处理FROM子句中的表名是从右向左的。为了提高查询效率,需要合理安排表的顺序。 **技巧...

    有关oracle SQL 优化整理记录

    总结,Oracle SQL优化是一个涉及多方面的过程,包括理解SQL执行机制、合理使用索引、优化SQL语法、调整表设计、有效利用游标和批处理以及借助各种监控和调优工具。通过这些方法,我们可以显著提升数据库性能,实现更...

    Oracle高性能SQL调整.rar

    《Oracle高性能SQL调整》这本书主要聚焦于如何优化Oracle数据库中的SQL查询,以提升系统的整体性能。在Oracle数据库环境中,SQL的高效执行是确保系统稳定、快速运行的关键因素。以下是一些核心的知识点: 1. **SQL...

    《oracle SQL性能优化》中文电子书

    《Oracle SQL性能优化》这本书是数据库管理员和开发人员的重要参考资料,它深入探讨了如何提高Oracle数据库的SQL查询性能。在数据库系统中,SQL查询的速度直接影响到应用的响应时间和整体性能,因此,理解并掌握SQL...

    Oracle SQL优化.pdf

    以上策略涵盖了Oracle SQL优化的多个方面,从编写高效SQL语句的基本原则到深入理解Oracle优化器的工作原理,以及如何通过索引管理和调整查询结构来提高数据库性能。在实际应用中,开发者应根据具体场景灵活运用这些...

    OracleSQL优化初步

    在Oracle数据库管理中,SQL优化是一项至关重要的任务,它直接影响到数据库系统的性能和效率。"Oracle SQL优化初步"这个主题涵盖了DBA们在日常工作中必须掌握的基础知识和技巧。SQL优化的目标是通过改进查询结构、...

    oracle sql_tuning

    1. **SQL执行计划**:SQL执行计划是Oracle解析器为每个SQL语句制定的执行策略,包括表的扫描方式(全表扫描或索引扫描)、连接顺序、排序操作等。理解执行计划有助于找出性能瓶颈并进行优化。 2. **绑定变量**:...

Global site tag (gtag.js) - Google Analytics