首页 | 新闻 | 体育 | 军事 | 教育 | 娱乐 | 汽车博览 | 风景名胜 | 人才招聘 | 供求信息
政府 | 经济 | 企业 | 电脑 | 健康 | 餐饮 | 保险专栏 | 搜索引擎 | 网站登录 | 房 地 产
电 脑 频 道 频道首页  硬件资讯  网络纵横  数码时代  安全专区  网络学院
搜 索


 
  当代徐州  >>>  电脑频道  >>>  网络学院  >>>  数据库  >>>  正文
数据库查询优化器的外部SQL重写器
2002年1月28日 14:45
  数据库查询优化器是RDBMS服务器的一个组成部分。如果是基于成本的优化,数据库查询优化器的任务就是:通过产生可供选择的执行计划,找到最低估算成本的执行计划来优化一条SQL语句。

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

  可供选择的执行计划 

  很明显,产生越多的可供选择的执行计划,获得最佳执行计划的可能性越大。能够产生的可供选择的执行计划的数量取决于计划空间(Plan Space)的大小限制和SQL语句的语法。计划空间的大小限制了查询优化器能够产生的可供选择的执行计划的数量。即使计划空间足够大也未必能够存放所有可能的待选执行计划。例如,一条有15个表连接的查询,它可能的表连接顺序是15的阶乘(15!=15*14*13…*1=1,307,674,368,000),就算只考虑LEFT-DEEP(查询树最左边和最底层)的执行计划,彻底进行优化的代价也很高。还有一个原因是有些SQL语句的语法无法让查询优化器产生更好的执行计划。

  不准确的成本估计

  对于基于成本的优化模式,估计的成本值是查询优化器用来从待选执行计划列表中选择某条执行计划执行的标准。成本估计的计算准确度依赖于数据库数据字典的准确度。RDBMS的一个基本特性是它在数据字典中维护它所包含的所有数据和结构的信息。另外,表大小的统计信息、索引、基数和数据直方图等也被存储下来,以使查询优化器对于待选执行计划进行成本估计时能够更加准确。

  外部SQL重写器

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

  图1则显示了外部SQL重写器(ESR,即External SQL Rewriter)作为新的SQL优化概念,它能够基于现有数据库的特性产生语义相等但语法不同的SQL语句。重写产生的SQL语句将取代程序源代码中的源SQL语句。这样,当程序运行时(使用新的SQL语句),查询优化器将会被影响而产生性能更好的执行计划。这个概念的新颖之处在于合并了人类的知识和智能到一个计算机算法中,它能够打破计划空间限制的障碍和避免在寻找最佳SQL语句时不准确的成本估算。


图1 ESR依据数据库的特性重写和替代有问题的SQL语句。

  ESR的优点是它并非一个基于实时的优化。可用于重写和优化SQL语句的时间理论上是无限的,它可以比数据库的查询优化器尝试更多的待选SQL语句。用户可以花费多达一天的时间来处理关键SQL语句的性能问题,ESR可以完全寻找可能的待选执行计划;ESR的另外一个优点是能够达到SQL性能提高的目的,无需进行额外的统计而使数据库查询优化器的负载过重。因此,ESR使得提升整个数据库性能变得简单且安全。

  另外,ESR相对于数据库内部的查询优化器更加灵活:SQL重写的知识库可以很容易扩展,搜索空间可以通过硬件的升级来扩展而毫无限制和缺点。

  优化过程中的ESR

  为了让ESR能够优化你的SQL语句,它必须避免数据库内部查询优化器限制所产生的障碍。另外,ESR必须拥有重写SQL语句的智能,以及知道用户数据库的特性来提供待选的SQL语句。卧龙传说提醒:在国内,由盈动华建(北京)科技发展有限公司所代理的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语句。用户可以选择的时间开始测试和进行测试。另外还提供了自动终止不必要的长时间运行的SQL语句,来缩短整个测试所需的时间。ESR放弃使用估计成本作为SQL性能的指标,但仍把它作为测试运行先后次序的排列依据。


图2 ESR的简单图示

  递归的SQL转换

  我们都知道,不同的SQL语法可以引起数据库查询优化器产生不同的执行计划、因此ESR也必须具有模拟人工重写SQL语句的能力。递归式SQL语法转换技术正是用来模拟人的SQL转换方法。它合并一系列有用的转换规则,并使用一次触发一条的方法来转换SQL语句。所有的转换规则是不互相依赖的,就像一个个密封的小门,只有在所有必须的条件都满足的情况下,某个密封门才会被打开。这保证了重写后的SQL语句与原SQL语句是语义等效的。由于一条被转换规则转换后的SQL语句具有了新的SQL语法格式,这可能使它符合另外一条转换规则的触发条件,因此转换能够以递归方式执行。

  无须专业经验

  ESR的重要性在于,整个优化过程中不需要使用者具有数据库专家的经验。ESR算法将会尝试所有的可能性来重写原来的SQL语句,以触发数据库查询优化器产生待选的执行计划。用户可以根据自己的偏好来选择一个更合适的SQL语句放入他们的源代码中。

  ESR技术的展望

  随着硬件的升级,ESR能够合并更多的SQL转换规则来处理数据库的新特性和更复杂的SQL语句,理论上,规则的数量是没有限制的。将来,随着数据库生产商在让用户影响数据库优化器方面更加开放,ESR将会在优化策略方面得到更多得控制。毫无疑问,ESR将会在分担数据库查询优化器的工作负荷上扮演越来越重要的角色。



查看本文相关文章:sql  优化器  查询  数据库  
TOP