ITPub博客

首页 > Linux操作系统 > Linux操作系统 > DM6.0基于成本的优化机制原理

DM6.0基于成本的优化机制原理

原创 Linux操作系统 作者:Zctitan88 时间:2010-02-26 12:56:34 0 删除 编辑
文章来自达梦技术社区http://bbs.dameng.com/
“成本”一词被广泛使用,一般指进行某项工作花费的代价。目前,数据库产品中也引入了基于成本的优化方法。达梦数据库(以下简称DM)中优化器是采用基于成本的优化,对SQL语句执行中各个环节进行代价评估,基于DM成本计算模型计算出成本,形成最优的执行计划去执行。总之,DM基于成本优化的最终目的是花费最小的代价,达到最优的性能。
DM中成本计算的依据是统计信息,主要包含表数据的分布、重复率、索引信息等。对于一个多表连接查询,优化器首先根据待处理数据库对象的统计信息,计算出相应的成本;然后调整表对象的执行顺序、连接方式、选择合适的索引,形成最优的执行计划;最后执行并输出结果。
以上对DM基于成本的优化机制做了简要介绍,对相关概念进行阐述,下面对DM优化机制的发展进行对比分析,最后通过具体例子证明基于成本的优化机制带来的好处。供客户、相关技术人员参考。
DM的查询优化机制经历了从基于规则的到基于成本的发展,下面简要介绍这两种机制在的处理过程。
(1)DM5.0优化机制
DM5是基于规则和成本的混合优化机制,其中成本优化只是进行简单情况的成本计算,可以认为DM5.0是基于规则的优化。语句执行过程是首先将语句转换成系统可识别的语法树,然后进行词法、语法分析,接着进行优化处理,最后形成执行计划去执行。具体过程如图1所示:
(2)DM6.0优化机制
DM6.0庰弃了基于规则的优化方式,采用完全基于成本的计划,通过各个环节的成本计算,形成最优执行计划,语句处理过程如图2所示: 
(3)DM5.0与DM6.0优化机制的异同
在处理数据量小、简单查询的情况下,DM5.0和DM6.0的优化机制基本会采用相同的处理方式,甚至基于规则的优化会更高效,因为可以省去过多的成本计算和对比分析。
对于复杂查询、大数据量的情况下,基于成本的优势就体现出来,尽管会进行较多的成本计算分析,但是这些消耗对于性能的提升基本可以忽略。
DM5.0采用基于规则和成本的混合优化机制,虽然包含了简单的成本计算,但是不够完善和成熟,基本上还是依赖既定的规则进行优化,部分情况下无法生成最优执行路径,例如在索引选择、驱动表的指定、连接方式等方面成为性能瓶颈的重要因素之一。
DM6.0采用基于成本的优化机制,在处理SQL语句方面充分体现了灵活性和智能性。针对不同的数据量、数据分布、索引类型等信息,会采用不同的方式进行处理,有效的利用系统资源,提高执行效率。
实际应用中,DM5.0和DM6.0对于同样的语句环境,分别会采用各自的处理方式,具体可参考表1:
表1 DM5.0和DM6.0处理方式对比
应用环境:create table t1(c1 int,c2 int,c3 int,c4 int);
          create index it1c1 on t1(c1);
          create index it1c2 on t1(c2);
          select * from t1 where c1=100 and c2=200; //查询语句
数据量\数据分布
DM5.0处理方式(基于规则)
DM6.0处理方式(基于成本)
1000条记录,c1列与c2列数据分布相同
使用it1c1索引进行等值查询
使用it1c1索引进行等值查询
10000万记录,c1列重复率为10%,c2 列值具有唯一性
使用it1c1索引进行等值查询
使用it1c2索引进行等值查询,有效减少IO
 
应用环境:create table t1(c1 int,c2 int,c3 int,c4 int);
          create index it1c1 on t1(c1);
          create index it1c2c3 on t1(c2,c3);
          select * from t1 where c1=100 and c2=200 and c3=300; //查询语句
数据量\数据分布
DM5.0处理方式(基于规则)
DM6.0处理方式(基于成本)
1000条数据,c1列与(c2,c3)列数据分布相同
使用it1c2c3索引进行等值查询
使用it1c2c3索引进行等值查询
10000条数据,c1列的选择性高于(c2,c3)列
使用it1c2c3索引进行等值查询
使用it1c1索引进行等值查询,具有更好的选择性
 
应用环境:create table t1(c1 int,c2 int);
          create table t2(d1 int,d2 int);
          select * from t1 where exists (select * from t2 where c1=d1); //查询语句
数据量\数据分布
DM5.0处理方式(基于规则)
DM6.0处理方式(基于成本)
t1包含100条数据
t2包含10000条数据
以t1表为驱动表进行hash半连接查询
以t1表为驱动表进行hash半连接查询
t1包含10000条数据
t2包含100条数据
以t1表为驱动表进行hash半连接查询
以t2表为驱动表进行hash右半连接查询,减少IO
 
应用环境:create table t1(c1 int,c2 int);
          create index it1c1 on t1(c1);
          select * from t1 where c1<=10; //查询语句
数据量\数据分布
DM5.0处理方式(基于规则)
DM6.0处理方式(基于成本)
t1包含3条数据
使用it1c1进行索引扫描
全表扫描
t1包含1万条记录,其中c1列高重复率(超过50%)
使用it1c1进行索引扫描
全表扫描
t1包含1万条记录,其中c1列具有高选择性(低于1%重复率)
使用it1c1进行索引扫描
使用it1c1进行索引扫描
 
从以上例子可以看出,基于成本的优化总是会根据上下文环境,通过代价计算选择最优的执行路径,达到较好的性能。可见DM基于成本的优化机制带来的好处还是值得我们坚定地去使用和完善它。
DM成本优化机制是一套完整的优化体系,内部的相关性很强,是优化器的核心。移植到DM的应用系统性能均有一定程度的提升,得到客户的一致认可和好评。随着DM产品不断的完善,DM成本优化机制会越来越智能,满足客户更高层次的需求。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/23392679/viewspace-627974/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
暂无介绍

注册时间:2010-02-24

  • 博文量
    213
  • 访问量
    793044