ORACLE和DB2优化器和性能比较

摘要:随着信息技术的发展,数据库应用范围越来越广,随之对数据库的要求也越来越高。普通的数据库已无法满足需求,这促进了优化器的诞生。本文从数据库的性能调整和优化问题等角度出发,从三个方面分析ORACLE与DB2的特点,比较ORACLE和DB2的异同。优化器的

  摘要:随着信息技术的发展,数据库应用范围越来越广,随之对数据库的要求也越来越高。普通的数据库已无法满足需求,这促进了优化器的诞生。本文从数据库的性能调整和优化问题等角度出发,从三个方面分析ORACLE与DB2的特点,比较ORACLE和DB2的异同。优化器的工作原理或者工作机制,利用优化器提高查询性能的方法,性能分析和调优的命令和工具。
  关键词:ORACLE;DB2;性能

  引言

  ORACLE数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为分布式数据库它实现了分布式处理功能;作为一个关系数据库,它是一个完备关系的产品。
  DB2是IBM出口的一系列关系型数据库管理系统,分别在不同的操作系统平台上服务。虽然DB2产品是基于UNIX的系统和个人计算机操作系统,在基于UNIX系统和微软在windows系统下的Access方面,DB2追寻了ORACLE的数据库产品。
  本文从这两者出发,探究ORACLE与DB2两大数据库的优化器特点以及其优化器对查询性能的优化效果。

  一、ORACLE和DB2优化器的工作原理

  Oracle的优化器共有两种的优化方式,即基于规则的优化方式(Rule-BasedOptimization,简称为RBO)和基于代价的优化方式(Cost-BasedOptimization,简称为CBO)。
  RBO方式:优化器在分析SQL语句时,所遵循的是Oracle内部预定的一些规则。比如我们常见的,当一个where子句中的一列有索引时去走索引。在RBO中Oracle根据可用的访问路径和访问路径的等级来选择执行计划,等级越高的访问路径通常运行SQL越慢,如果一个语句有多个路径可走,Oracle总是选择等级较低的访问路径。RBO优化器死板的根据规则来选择执行计划显然不够灵活,在RBO中也无法使用物化视图等Oracle提供的新特性。
  CBO方式:CBO是基于成本的优化器,它根据可用的访问路径、对象的统计信息、嵌入的Hints来选择一个成本最低的执行计划。CBO主要包含以下组件:查询转换器(QueryTransformer)、评估器(Estimator)、计划生成器(PlanGenerator)。
  图1 CBO方式
ORACLE和DB2优化器和性能比较
  查询语句的形式会影响所产生的执行计划,查询转换器的作用就是改变查询语句的形式以产生较好的执行计划。
  视图合并:如果SQL语句中含有视图,经分析后会把视图放在独立的“视图查询块”中,每个视图会产生一个视图子计划,当为整个语句产生执行计划时,视图子计划会被直接拿来使用而不会照顾到语句的整体性,这样就很容易导致不良执行计划的生成。视图合并就是为了去掉“视图查询块”,将视图合并到一个整体的查询块中,这样就不会有视图子计划产生,执行计划的优良性得到提升。
  谓词推进:不是所有的视图都能够被合并,对于那些不能被合并的视图Oracle会将相应的谓词推进到视图查询块中,这些谓词通常是可索引的或者是过滤性较强的。
  非嵌套子查询:子查询和视图一样也是被放于独立查询块中的,查询转换器会将绝大多数子查询转换为连接从而合并为同一查询块,少量不能被转换为连接的子查询,会将它们的子计划安照一个高效的方式排列。
  物化视图的查询重写:当query_rewrite_enabled=true时,查询转换器寻找与该查询语句相关联的物化视图,并用物化视图改写该查询语句。
  评估器:
  评估器通过计算三个值来评估计划的总体成本:选择性(Selectivity)、基数(Cardinality)、成本(Cost)。
  选择性:是一个大于0小于1的数,0表示没有记录被选定,1表示所有记录都被选定。统计信息和直方图关系到选择性值的准确性。如:name=’Davis’,如果不存在统计信息评估器将根据所用的谓词来指定一个缺省的选择性值,此时评估器会始终认为等式谓词的选择性比不等式谓词小;如果存在统计信息而不存在直方图,此时选择性值为1/count(distinctname);如果存在统计信息也存在直方图,选择性值则为count(name)wherename=’Davis’/count(name)wherenameisnotnull。
  基数:通常表中的行数称为“基础基数”(Basecardinality);当用WHERE中的条件过滤后剩下的行数称为“有效基数”(Effectivecardinality);连接操作之后产生的结果集行数称为“连接基数”(Joincardinality);一个字段DISTINCT之后的行数称为“DISTINCT基数”;“GROUP基数”(Groupcardinality)比较特殊,它与基础基数和DISTINCT基数有关,例如:groupbycolx则GROUP基数就等于基础基数,但是groupbycolx,coly的GROUP基数则大于max(distinctcardinalityofcolx,distinctcardinalityofcoly)且小于min((distinctcardinalityofcolx*distinctcardinalityofcoly),basecardinality)。
  成本:就是度量资源消耗的单位。可以理解为执行表扫描、索引扫描、连接、排序等操作所消耗I/O、CPU、内存的数量。
  计划生成器:
  计划生成器的作用就是生成大量的执行计划,然后选择其中总体成本最低的一个。
  由于不同的访问路径、连接方式和连接顺序可以任意组合,虽然以不同的方式访问和处理数据,但是可以产生同样的结果,因此一个SQL可能存在大量不同的执行计划。但实际上计划生成器很少会试验所有的可能存在的执行计划,如果它发现当前执行计划的成本已经很低了,它将停止试验,相反当前计划的成本如果很高,它将继续试验其他执行计划,因此如果能使计划生成器一开始就找到成本很低的执行计划,则会大量减少所消耗的时间,这也正是我们为什么用HINTS来优化SQL的原因之一。 
下载提示:

1、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“文章版权申述”(推荐),也可以打举报电话:18735597641(电话支持时间:9:00-18:30)。

2、网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。

3、本站所有内容均由合作方或网友投稿,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务。

原创文章,作者:写文章小能手,如若转载,请注明出处:https://www.447766.cn/chachong/6744.html,

Like (0)
写文章小能手的头像写文章小能手游客
Previous 2020年6月18日
Next 2020年6月21日

相关推荐

My title page contents