欢迎来到天天文库
浏览记录
ID:14215331
大小:31.50 KB
页数:9页
时间:2018-07-26
《基于sql的数据库性能优化分析》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、基于SQL的数据库性能优化分析 [摘要]数据库性能调整与优化,对于提高数据库的稳定性、可靠性,保障业务高效运行有着重要意义。本文从数据库性能优化角度出发,探讨程序开发过程中,Oracle数据库的SQL语句调整和优化技术。 [关键词]SQL;数据库;性能优化 doi:10.3969/j.issn.1673-0194.2013.15.039 [中图分类号]TP392[文献标识码]A[文章编号]1673-0194(2013)15-0064-02 0引言 随着计算机技术和网络技术的普及与广泛应用,数据库
2、技术也得到了长足发展,并成为现代计算机信息与应用系统的核心基础技术。Oracle数据库是目前使用较为广泛的数据库系统,用户规模和应用范围不断扩展,由此带来的系统性能问题愈来愈突出,因此,对数据库优化技术方法的探索,对解决系统瓶颈,节约系统开销,确保数据库和业务系统稳定、高效地运行,有着至关重要的意义。 数据库的优化,主要从硬件、操作系统、数据库参数和应用程序等方面进行配置和调整。据统计,对硬件系统和数据库参数进行优化所获得的性能提升,只占数据库系统性能提升的40%左右,另外的60%系统性能提升来自于对应用
3、程序的优化。其中,应用程序的优化通常可分为两个方面:源代码和SQL语句。一方面,由于涉及对程序逻辑的改变,源代码的优化在时间成本和风险上代价很高,而对数据库系统性能的提升收效有限;另一方面,应用程序对数据库的操作,最终体现在SQL语句对数据库的操作,因此SQL语句的执行效率决定了数据库的性能。由此可见,应用程序的优化应着重于SQL语句的优化。在数据库应用系统中,相同功能的程序可以采用不同的SQL语句编写实现,而不同的SQL语句存在着性能及效率上的差异,这种差异在大型数据库环境中表现得尤为明显。因此,通过优化
4、调整SQL语句,从而显著改善整个系统的性能,对提高数据库内存区的命中率、减少I/O访问、减少对网络资源的占用等有着重要意义。 1SQL优化技术分析及实现方法 要对SQL语句进行优化,首先应该清楚SQL语句的执行过程。Oracle会为每个用户进程分配一个服务器进程,当服务器进程接收到用户进程提交的SQL语句时,服务器进程会对SQL语句进行语法和词法分析。检查通过后,服务器进程会将SQL语句转变为ASCII码,并通过一个Hash函数将ASCII码生成Hash值,服务器进程会到系统全局区(SystemGlob
5、alArea,SGA)的共享池(SharedPool)中查询此Hash值是否存在。如果存在,服务器进程会在共享池中读取已经解析好的语句来执行,这就是软解析;如果不存在,则需要通过优化器生成执行计划和生成执行编码,这就是硬解析,硬解析完成后,Oracle会将SQL语句本身代码、Hash值、执行计划和所有与此语句相关的统计数据放到共享池中。 根据以上所述的SQL语句执行过程,分析优化SQL语句,应主要从以下几个方面来进行: (1)共享SQL语句。 (2)高质量的SQL语句。 (3)使用索引。 1.1共
6、享SQL语句 为了不重复解析相同的SQL语句,在第一次解析之后,Oracle将SQL语句存放在内存中。这块位于系统全局区域的共享池中的内存可以被所有的数据库用户共享。如果用户提交的SQL语句和之前的执行过的语句完全相同,Oracle就能很快获得已经被解析的语句以及最好的执行路径,从而大大地提高了SQL的执行性能并节省了内存的使用。要共享SQL语句,必须满足以下3个条件: (1)当前被执行的语句和共享池中的语句必须完全相同。 (2)两个语句所指的对象必须完全相同。 (3)两个SQL语句中必须使用相同名
7、字的绑定变量(bindvariables)。 1.2高质量的SQL语句 对于海量数据,质量高的SQL语句和质量差的SQL语句的执行时间可能相差几百秒,可见对于应用系统来说,编写高质量的SQL语句将显著提高系统的速度和可用性。 1.2.1使用DECODE函数来减少处理时间 使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表,例如: SELECTCOUNT(*),SUM(SAL)FROMEMP WHEREDEPT_NO=0200ANDENAMELIKE‘SMITH%’; SELECTC
8、OUNT(*),SUM(SAL)FROMEMP WHEREDEPT_NO=0300ANDENAMELIKE‘SMITH%’; 使用DECODE函数,可以高效地得到相同结果: SELECTCOUNT(DECODE(DEPT_NO,0200,’X’,NULL))D0020_COUNT, COUNT(DECODE(DEPT_NO,0300,’X’,NULL))D0030_COUNT, SUM(DECODE(D
此文档下载收益归作者所有