首页 > 范文大全 > 正文

关于SQL性能问题的探讨

开篇:润墨网以专业的文秘视角,为您筛选了一篇关于SQL性能问题的探讨范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘 要 本文首先提出了一个针对ORACLE的SQL文性能问题,然后针对该问题进行了调查,并进行了从SQL的优化、业务层面的各种考虑和尝试,最终问题得到了解决,本文主要给SQL文的性能优化解决提供了一个思路。关于sql文的性能问题,希望开发者不要局限与SQL文本身,可以从其他方向寻求突破,使问题得到很好的解决。

【关键词】ORACLE SQL 性能优化

1 问题描述

在使用spring框架进行web项目的开发中,所使用的数据库是ORACLE11G。在项目开发中,要表示某个页面时,需要从DB中获取得一些信息。取得信息的SQL文大约涉及到有20个表,该页面的表示在测试环境中并没有发现有任何问题,但是到了客户现场却出现画面加载失败现象。通过对Log的分析,得出的原因是由于该SQL文不能正常的执行,出现了ORA-1625错误,这是临时表空间不能扩展的问题。针对这个问题需要调查分析出现错误的原因及解决的方法。

2 调查过程

首先将该SQL文在现地DB中通过PL/ SQL执行,执行了半个小时以上并没有结果,查看了一下临时表空间已经达到了32G,而测试环境中的临时表空间使用量不足1G。考虑这方面于是从以下两个方面进行了调查和确定解决方案。

(1)为什么在测试环境中没出现任何问题,而在现地环境中却有问题。

(2)关于SQL文本身的优化。一个SQL文使用了这么大的临时表空间,无论如何都是不正常的。

关于第一个方面:测试环境和现地环境的差异分析。

首先想到的是可能是两个DB的数据量不同,于是对涉及到的所有表进行了数据量的确认,发现大体相同,数据量相差在5%以内。其中数据最大的一个表的数据量在30万条左右,其他有三个表的数据量不足10万条,剩余的大约在1万条以内,因此排除数据量的原因。

下一步考虑是不是DB的参数设置的不同引起的,于是将两个DB的参数进行了比较,首先发现DB的版本号不完全相同。尽管都是ORACLE11g,但是小版本号不同,另外参数也有很多不同的,于是将现地DB的参数修改成和测试环境中的一致,仍然解决不了。还有一个思路就是将现地的数据放到测试环境中,看测试环境中是否有问题,如果有问题说明是数据的原因,如果没有问题,说明是其他的原因。但是由于其他各种原因,最终放弃了这个方向的调查,重点针对SQL文的优化进行调查。

关于第二个方面:SQL文的优化的问题。

首先分析SQL文发现,SQL文的一些写法还是有优化的空间的,(1)关于表名的顺序,因为ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表DRIVING TABLE)将被最先处理,在FROM子句中包含多个表的情况下,必须选择记录条数最少的表作为基础表,根据这一点对表的顺序进行了调整。(2)ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前,那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾。根据这一点对WHERE后条件的顺序进行了调整。这两点速度和临时表空间的使用量大约提高了10%左右,还有根据其他的优化原则,例如追加索引等。对SQL文进行了优化。但是修改后在现地DB中仍然无法运行。于是转化一下思路,考虑能不能从业务方面考虑对SQL文进行拆分,分两次执行,这样就可以减少单个SQL文参照的表的数量,通过分析发现原来的SQL文之所以涉及到了20个表,其中一半的表的目的是根据CODE取名字用的,因此可以将这部分表删除,第一个SQL文只取code,关于名字可以通过第二个SQL文取得。通过对SQL文的拆分,发现临时表空间大约减少了三分之二,但是该SQL文在现地DB中执行,仍然不好使,最后通过对修改后的SQL文分析发现是其中的一个条件的原因,于是将该条件删除,关于该条件的数据的过滤作业移到了APPlication端,即通过JAVA对数据进行再次过滤。最终问题得到了解决。

3 结束语

本文通过具体实例,描述了ORACL的SQL文的一个性能问题的解决的过程。从测试环境和现地环境的差异分析,SQL文写法的优化,包括关于表名的顺序,表之间的连接必须写在其他WHERE条件之前,那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾的分析和调查最终的问题得到解决。本文也给性能问题的调查解决提供了一个方向。当在实际项目中遇到问题时,解决问题可以从多个方面进行考虑而不要局限于一点,例如SQL的优化,如果通过SQL文的优化比较困难的话,可以考虑能不能从业务层面,对SQL文进行拆分,以及通过应用程序进行过滤等,使问题得到解决。希望为大家提供一个好的思路。

参考文献

[1]魏静敏,刘欢杰.关于SQL文优化问题总结[J].企业导报,2012(12).

[2]张晓丽.SQL查询性能的优化研究[J].西安航空技术高等专科学校学报,2009(01).

作者单位

1.沈阳工学院 辽宁省抚顺市 113122

2.东软集团股份有限公司 辽宁省沈阳市 110179