浅析Oracle数据库优化器.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文档。上传文档
查看更多
浅析Oracle数据库优化器.doc

浅析Oracle数据库优化器   摘要:随着数据库规模的不断扩大,数据库系统的性能问题也越来越突出,数据库应用系统能否正常、高效地运行倍受关注,数据库优化技术方法的探索具有非常重要的意义。本文主要通过介绍Oracle数据库优化器的应用,了解一种Oracle数据库的SQL 分析和执行的优化工具。   关键词:数据库;优化器   在现代信息技术的带动下,数据库规模不断的扩大,用户数量的增加,数据库应用系统的响应速度下降,性能问题越来越突出。为了改善系统的性能,数据库系统的性能调整与优化对于整个系统的正常运行起着至关重要的作用。   一、Oracle数据库的查询过程   Oracle数据库应用系统通过SQL(Structured Query Language)语言与数据库进行通信,数据库管理系统通过执行用户提交SQL语句完成查询过程。   (1)解析是检查SQL语句的语法和语义,最终生成SQL语句的执行计划,并将SQL语句和执行计划存放到共享池中。(2)执行(Execute)是指服务器进程按照SQL语句执行计划执行SQL语句。(3)提取数据(fetch)是指将被选择行数据返回到客户端。   二、Oracle优化器(Optimizer)   Oracle优化器是Oracle在执行SQL之前分析语句的工具。它负责指定SQL的执行计划,也就是它负责保证 SQL执行的效率最高。这些因素直接决定SQL的执行效率,所以优化器是 SQL 执行的核心,它做出的执行计划好坏,直接决定着SQL的执行效率。   Oracle的优化器有两种优化方式:   * RBO(Rule-Based Optimization): 基于规则的优化器   在Oracle8i 之前,Oracle使用的是RBO的优化器,它的执行机制非常简单,就是在优化器里面嵌入若干种规则,执行的 SQL语句符合哪种规则(RANK),则按照规则(RANK)制定出相应的执行计划。由于RBO 只是简单的去匹配Rank,所以它的执行计划有时并不是最佳的。因此数据库的查询性能受到影响。   * CBO(Cost-Based Optimization): 基于代价的优化器   从Oracle8i 开始, Oracle引入了CBO,它的思路是让Oracle获取所有执行计划相关的信息,通过对这些信息做计算分析,最后得出一个代价最小的执行计划作为最终的执行计划。CBO是一种比RBO更理性化的优化器。从Oracle10g开始,Oracle已经彻底丢弃了RBO。 即使在表,索引没有被分析的时候,Oracle依然会使用CBO。此时,Oracle 会使用一种叫做动态采样的技术,在分析SQL的时候,动态的收集表,索引上的一些数据块,使用这些数据块的信息及字典表中关于这些对象的信息来计算出执行计划的代价,从而挑出最优的执行计划。   CPU 代价(Cost)的计算方式现在默认为 CPU+I/O 两者之和。可通过DBMS_XPLAN.DISPLAY_CURSOR 观察更为详细的执行计划。优化器在判断是否用这种方式时,主要参照的是表及索引的统计信息。统计信息给出表的大小、有少行、每行的长度等信息。这些统计信息起初在库内是没有的,是做analyze后才出现的,很多时候,过期统计信息会令优化器做出一个错误的执行计划,因此应及时更新这些信息。CBO应该自动收集,实际却不然,有时候在CBO情况下,还必须定期对大表进行分析。   三、Oracle优化器的模式   1.CHOOSE   这个值表示SQL语句既可以使用RBO优化器也可以使用CBO优化器,而决定该SQL到底使用哪个优化器的唯一因素是,所访问的对象是否存在统计信息。如果所访问的全部对象都存在统计信息,则使用CBO优化器优化SQL;如果只有部分对象存在统计信息,也仍然使用CBO优化器优化SQL,优化器会为不存在统计信息对象依据一些内在信息来生成统计信息,只是这样生成的统计信息可能不准确,而导致产生不理想的执行计划;如果全部对象都无统计信息,则使用RBO来优化该SQL语句。此模式仅在Oracle9i及之前版本中被支持,Oracle10g已经废除。Oracle8i及Oracle9i中为默认值。   2.RULE   不论是否存在统计信息,都将使用RBO优化器来优化SQL。仅在Oracle9i及之前版本中被支持,Oracle10g已经废除。   3.FIRST_ROWS_n   不论是否存在统计信息,都使用CBO优化器,并以最快的速度返回前n行记录。当CBO 的优化模式设置为FIRST_ROWS(n)时,Oracle在执行SQL时,优先考虑将结果集中的前 n条记录以最快的速度反馈回来。优化器并不需要同时将所有符合条件的结果返回,用户也

文档评论(0)

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

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

版权声明书
用户编号:5243141323000000

1亿VIP精品文档

相关文档