sql优化器探讨

rshitibi085

rshitibi085

2016-01-29 16:45

sql优化器探讨,sql优化器探讨
多年以来,商业数据库生产商一直致力于提高数据库的查询性能。尽管他们持续地付出努力和辛勤地工作,我们还是无法看到关系型数据库系统(rdbms)在性能上有显著的提高。用户继续忍受性能低下的sql语句,数据库专家们继续在sql语句优化的泥潭中痛苦挣扎。 

  本文将介绍数据库查询优化器是如何工作的、为什么问题持续存在,并深入探讨数据库查询优化器将来的发展方向。 

  数据库查询优化器 

  数据库查询优化器是rdbms服务器的一个组成部分。对于基于成本的优化,数据库查询优化器的任务是,通过产生可供选择的执行计划,找到最低估算成本的执行计划,来优化一条sql语句。它在sql语句性能表现上扮演了至关重要的角色。 

  当一条sql语句被送入rdbms服务器,它将会被解析并提交给数据库查询优化器。查询优化器将会进行查询重写和表达式评估,以产生可供选择的执行计划。产生可供选择的执行计划的数量,取决于在rdbms中定义的计划空间(plan space)大小。对于每个待选的执行计划,成本估计将被计算,带有最小成本的执行计划将被选取用来执行sql语句。这种方法存在着两个无法解决的问题:无法产生全部可能的可选执行计划和成本估计的不准确。 

  新的sql优化概念——外部sql重写器 

  一个有经验的程序员,把有问题的sql语句的速度提高数千倍是很常见的。凭着对具体数据库特征的了解,对sql语句进行语法的重新构造。一个开发人员能够帮助查询优化器获得更好的执行计划,而这执行计划是查询优化器无法靠自身独立工作产生的。这给予我们一个启示,我们是否能通过计算机模拟人的行为,来实现同样的目的呢? 

显示了外部sql重写器(external sql rewriter--esr)的概念,它能够基于现有数据库的特性,产生语义相等但语法不同的sql语句。重写产生的sql语句,将取代程序源代码中的源sql语句。这样,当程序运行时(使用新的sql语句),查询优化器将会被影响,而产生性能更好的执行计划。事实上,有经验的程序员和数据库管理员,一直在期盼着这个概念的出现。这个概念的新颖之处在于,将人类的知识和智能合并到一个计算机算法中,它能够打破计划空间(plan space)限制的障碍,避免在寻找最佳sql语句时不准确的成本估算。 

  esr的优点是,它的优化并非一个基于实时,可用于重写和优化sql语句的时间,在理论上是无限的。它可以比数据库的查询优化器尝试更多的待选sql语句。用户花费多达一天的时间来处理关键sql语句的性能问题,而esr可以彻底寻找可能的待选执行计划。esr的另外一个优点是,能够达到sql性能提高的目的,而无需进行额外的统计,使数据库查询优化器的负载过重。因此,esr使得提升整个数据库性能变得简单且安全。最后,esr相对于数据库内部的查询优化器更加灵活:sql重写的知识库可以很容易扩展,搜索空间可以通过硬件的升级来扩展,而毫无限制和缺点。 

  esr是如何工作的? 

  为了让esr能够优化sql语句,必须避免数据库内部查询优化器限制所产生的障碍。另外,esr必须拥有重写sql语句的智能,并知道你数据库的特性,来提供待选的sql语句。尽管达到上面的要求是困难的,但是开发一个这样的算法也不是不可能的。国内市场上已经由盈动华建公司代理推出了一个相当成熟的产品——lecco technology 的lecco sql expert。 

  sql语句可以被直接输入,或通过检查源代码来捕获有问题的sql语句。当esr收到sql语句,一个递归的转换算法被应用来重写源sql语句,产生每一个可能的语义等价的待选sql语句。递归的sql转换引擎,拥有内建的人工智能和sql转换规则,它依照具体数据库的特性来重新构造sql语句。 

  可扩展的计划空间 

  用户可自定义的限额让用户能够控制搜索空间。如果用户对在定义的限额内产生的结果不满意,或无法找到性能更好的待选sql语句,用户可以提高限额来增加搜索空间,直到更多的待选sql语句被找到。因此,esr的计划空间的扩展,要比数据库查询优化器有弹性得多。另一个考虑周到的特性是,esr可以在内部把具有重复执行计划的sql语句给排除掉。这样不仅减少了人工反复尝试的成本,还保证了重写产生的每条sql语句,都具有不同的执行计划和性能。 

尽管esr能够扩大它的计划空间和产生更多的待选sql语句,它还是和数据库内部查询优化器一样,面对着不准确的成本估算的问题。没有实际地执行过每一条重写后的sql语句,是根本无法知道,在所有待选sql语句中到底哪一条的性能最好。因此,实际的途径是,测试运行所有的待选sql语句。图2中的esr例子使用了这一方法并附加提供了测试选项来找到性能最好的sql语句。用户可以选择,什么时候来开始测试和允许进行多长时间的测试。此外,esr的重要性还在于,整个优化过程不需要使用者具有数据库专家的经验。正如我们所知道的,不同的sql语法可以引起数据库查询优化器产生不同的执行计划,因此es
展开更多 50%)
分享

猜你喜欢

sql优化器探讨

SQLServer
sql优化器探讨

SQL 优化

编程语言 网络编程
SQL 优化

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

浅谈如何优化SQL Server服务器

编程语言 网络编程
浅谈如何优化SQL Server服务器

优化SQL Server服务器内存配置的策略

SQLServer
优化SQL Server服务器内存配置的策略

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

SQL索引优化方法

编程语言 网络编程
SQL索引优化方法

SQL优化34条

SQLServer
SQL优化34条

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

SQL Server的用户及权限

SQL Server的用户及权限

SQL Server中格式化表中的数据

SQL Server中格式化表中的数据
下拉加载更多内容 ↓