基于cbo优化器研究与优化.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于cbo优化器研究与优化

基于cbo优化器研究与优化   摘要:随着oracle版本的不断地改进,传统的基于规则的优化器rbo逐渐被基于成本的优化器cbo代替。Cbo优化器是一种基于成本的优化器技术,而优化器性能的高低直接关系到数据库性能的好坏,因此对cbo优化器的研究就显得非常重要了。该文围绕着cbo优化器的概念、计算原理,全面的介绍了cbo优化器的用途和两个重要的参数成本和基数的计算过程。 同时,文章对优化器的不足之处提出了优化方案并通过实验数据验证了优化方法。   关键词:oracle;cbo优化器 ;card ;cost; 优化   中图分类号 TP392 文献标识码 A 文章编号:1009-3044(2013)18-4150-03   如今我们生活很多方面都离不开数据库的支持,如电信银行等系统都能看到数据库的影子。Oracle数据库是目前最著名的商用数据库之一。优化器是数据库中最要的部分之一,它负责为sql语句选择执行计划。它在数据库中起着非常重要的作用。因此对它的研究是非常必要的。文章将从数据库的原理和优化两方面来研究cbo优化器。   1 cbo优化器简介   针对基于规则的优化器RBO的缺陷,oracle7开始就推出了基于成本的优化器技术,也就是基于代价的优化方式。基于代价的优化方式(Cost-Based Optimization,简称为CBO)是计算机通过统计相应的表和索引等信息,对其进行量化,并从中选择成本最小的方式生成sql执行计划。   2 代价方式原理计算   在cbo优化器中最重要的计算就是基数(cardinality)和代价(cost)计算,优化器很大部分依靠对它的计算的值来选择最小代价的计划执行sql语句。   2.1对基数计算过程的探讨   本文章以oracle10.0版本为实验对象,假设数据是分布均匀的,基数(cardinality)=选择率(selectivity)*总行数(rownums-rownumsnulls),基数是指从数据表、结果集或者索引应返回的行数数据。选择率实际上是是优化器基于相关谓词所期望返回数据行数量的分数。由于总行数和为Null的值是固定的,所以关键的是选择率,对基数的探讨最主要的是对选择率的探讨。   一个非正式的,近似的优化器算法如下所示[1]:   选择率=请求的区间/总区间大小   列如在区间区间(a-f)中 有a、b、c、e、f, 5个坐标点。单个谓词为 xe(a= e =f)和 b xc (a= b =f) (a= c =f)的区间用数学线段表示为如图 1所示:   2.2 对成本(cost)计算的简单的分析   在不同的版本中成本的计算定义不同,在oracle9i中对成本的公式[1]如下描述:   cost = ( #SRds * sreadtim + #SRDS:单数据块读的次数;   #MRds * mreadtim + #MRDS:多数据块读的次数;   #CPUCycles / cpuspeed SREADTIM:一次单数据块读的时间   ) / sreadtim #CPUCYCLES: 完成查询所需要发出   的CPU 指令数   CPUSPEED:CPU 的处理速度   其实质主要由2个基本组成部分构成,I/O代价,cpu代价。I/o代价是指数据从磁盘读入内存所需的代价,cpu是指处理内存数据的代价。i/o代价= #SRds +#MRds*mreadtim/sreadtim ,而cpu代价为:#cpucycles/cpuspeed/sreadtim。对cost的计算实际上是从各种的统计信息中找出相关的数据,对其进行量化计算最后形成cost。   3 Cbo优化器的优化   3.1 对cbo优化的建议   目前的cbo优化器还处于不断地变化中,存在许多的不足之处:如信息过时、条件中有函数、连接表数过多等,cbo则未必选择的是最优的方式。而且cbo优化器可能会有不定期改变执行计划的趋势,这种计划的不稳定性,对于有着海量数据的数据库而言是一种灾难。因此对cbo优化器不足的优化就显得格外重要。下面是对cbo优化器提出的7种优化方案。   1)对未达到期望的sql语句添加提示   基于优化器引擎技术的sql提示语句最初是用来弥补未成熟的基于代价的优化器的缺陷的,它是一种简单的高效的优化方式。Sql提示语句规则简单,直接的在语句中嵌入优化器指令即可。为了与普通的注释区别开来其采用/* + HINTS* /格式[4]来书写。这种提示可以改变工作或计算方式,但并不能直接限制优化器选择的访问路径。   2)删除错误的统计信息,重新统计信息   由于cbo优化器几乎都是通过执行引擎搜集各种统计信息来选择最好的执行计划,oracl

文档评论(0)

fangsheke66 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档