`
kavy
  • 浏览: 871976 次
  • 性别: 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

分享到:
评论

相关推荐

    SQL语句性能调整 ORACLE的执行计划.

    SQL 语句性能调整 ORACLE 的执行计划 SQL 语句性能调整是 Oracle 数据库开发中非常重要的一部分,它...这些案例可以帮助开发者更好地理解 SQL 语句性能调整和 ORACLE 的执行计划,从而提高 SQL 语句的执行效率和性能。

    Oracle的三种表连接方式

    例如,select from t1 inner join t2 on t1.id=t2.id 以上的这个 hint 代表的是按照 sql 中指定的表顺序进行连接。也就是我把 t1 作为驱动表(Driving table)。Oracle 会根据 t1 中的每一行, 去寻找 t2 中满足 t1.id...

    Oracle优化器介绍

    Oracle 优化器可以分为两大类:基于规则的优化器(RBO)和基于成本的优化器(CBO)。 基于规则的优化器(RBO) RBO 是一种 Based on Rule 的优化器,根据可用的访问路径和访问路径的等级来选择执行计划。RBO 访问...

    Oracle_SQL优化

    Oracle_SQL优化 Oracle的优化器有两种方式,一种是基于规则的优化方式(RBO),另外一种是基于代价的优化方式(CBO),Oracle推荐在oracle8以后的版本强烈推荐使用CBO的方式。

    ORACLE CBO RBO 优化

    ORACLE CBO RBO 优化

    ORACLE9i_优化设计与系统调整

    §9.10.2 对增长表进行规划和分析 112 第10章 数据库结构设计要点 113 §10.1 分析阶段的对表的理解 113 §10.2 正确的主键字段的选择 113 §10.3 字段类型及长度的选择 113 §10.3.1 如果能用字符型就不要用数字型 ...

    Oracle优化常用概念.pptx

    执行计划是 Oracle 优化器生成的最佳执行路径,包括索引的使用、表的访问、表之间的连接等等。可以使用 Pl/sql 中按 F5、Explain plan、Sql trace 和 Sql/plus autotrace 等方式生成执行计划。要看懂执行计划,需要...

    Oracle的SQL语句执行效率问题查找与解决方法文.pdf

    2. 使用基于成本的优化器(CBO)或基于规则的优化器(RBO),选择合适的优化器模式。 3. 使用数据库特性,例如 Explain Plan 和 AUTOTRACE,查看性能统计信息。 三、 Oracle 优化器模式 Oracle 优化器模式主要有两...

    Oracle数据库优化培训.pptx

    本篇文章主要介绍 Oracle 数据库优化的相关知识,涵盖了 SQL 语句执行过程、ORACLE 优化器、表之间的关联、如何得到 SQL 执行计划、如何分析执行计划等内容。 SQL 语句执行过程 SQL 语句处理的基本过程包括查询...

    Oracle优化.ppt

    基于规则的优化方式(RBO)是指优化器在分析 SQL 语句时,所遵循的是 Oracle 内部预定的规则。例如,在 WHERE 子句中的一列有索引时,优化器就会选择走索引。基于代价的优化方式(CBO)是指优化器在分析语句时,会...

    Oracle优化器介绍(精简完善版).doc

    通过对RBO和CBO的深入学习,我们可以更好地调整SQL语句,使用合适的索引,甚至通过设置优化器提示来指导优化器选择更优的执行计划。在日常数据库管理中,定期更新统计信息以保持CBO的准确性也是必要的工作,因为准确...

    sql优化 策略

    Oracle 的优化器共有两种优化方式,即基于规则的优化方式 (RBO) 和基于代价的优化方式 (CBO)。CBO 方式可以根据语句的代价来优化查询计划。 通过遵守这些优化策略,数据库管理员可以提高数据库的查询效率,降低...

    性能优化之-Oracle性能优化.ppt

    oracle一些基本的SQL优化,适合入门讲座 ORACLE的优化器共有3种: a. RULE (基于规则rbo) b. COST (基于成本cbo) c. CHOOSE (选择性)  设置缺省的优化器,可以通过对init.ora文件中 OPTIMIZER_MODE参数的各种声明,...

    ORACLE数据库中SQL优化解析

    本文介绍了SQL的执行过程,ORACLE优化器的基本原理,优化器的选择和应用,以及如何建立 和管理索引来提高程序的执行效率。并以实际工作经验介绍了优化工具以及提出对SQL优化的体会。

    让Oracle跑得更快 Oracle 10g性能分析与优化思路.part2.rar

    4.1 rbo基于规则的优化器 66 4.2 cbo基于成本的优化器 69 第5章 执行计划 85 5.1 cardinality (基数) 85 5.2 sql的执行计划 94 第6章 hint 109 6.1 和优化器相关的hint 115 6.1.1 all_rows和first_rows(cbo) 115 ...

    oracle经典面试题

    CBO(Cost-Based Optimizer)和RBO(Rule-Based Optimizer)都是Oracle优化器的工作模式。 * RBO遵循简单的分级方法学,使用15种级别要点,当接收到查询时,优化器将评估使用到的要点数目,然后选择最佳级别(最少...

    Oracle的RBO和CBO详细介绍和优化模式设置方法

    RBO方式:优化器在分析SQL语句时,所遵循的是Oracle内部预定的一些规则。比如我们常见的,当一个where子句中的一列有索引时去走索引。 CBO方式:它是看语句的代价(Cost),这里的代价主要指Cpu和内存。优化器在判断是否...

    oracle_DBA_常用SQL语句[借鉴].pdf

    "Oracle DBA常用SQL语句" ...这些SQL语句是Oracle DBA在日常工作中经常使用的,涵盖了数据库的各种方面,包括表空间管理、回滚段管理、控制文件管理、日志文件管理、会话管理、字符集管理、SQL优化管理等。

    DBA面试题 oracle

    本文总结了 Oracle 数据库管理员(DBA)面试中的一些重要知识点,从表连接方式、执行计划、CBO 和 RBO、SQL 调整、索引、绑定变量、执行计划、排序等方面进行了详细的解释。 一、表连接方式 在 Oracle 中,表连接...

    CBO,RBO在ORACLE中的应用

    CBO,RBO在ORACLE中的应用

Global site tag (gtag.js) - Google Analytics