关于Oracle数据库性能优化方法的研究.docx
《关于Oracle数据库性能优化方法的研究.docx》由会员分享,可在线阅读,更多相关《关于Oracle数据库性能优化方法的研究.docx(37页珍藏版)》请在冰豆网上搜索。
关于Oracle数据库性能优化方法的研究
毕业设计说明书
关于Oracle数据库性能
优化方法的研究
1021011
软件学院
学生姓名:
学号:
软件工程
学院:
刘洪伟李众
专业:
指导教师:
2014年月
关于Oracle数据库性能优化方法的研究
摘要
数据库作为计算机信息系统的基础和核心,在日常工作和生产中的作用日趋显著,相关的数据库技术也得到迅猛发展。
在众多数据库产品当中,Oracle系列数据库凭借其完善的性能被广泛应用于企业办公、网站建设等各个领域。
伴随各类数据库规模的不断扩大,单纯地建立数据库早已不能满足要求,对于数据库的关注重点越来越多地被放在对其性能的调整上。
Oracle优化的目的是增加吞吐量、减少系统反应时间、降低背景时间。
其性能的优化主要涉及两个领域:
Oracle数据库服务器的优化,应用系统的优化。
数据库性能的好坏,用户一般会直接从应用程序与数据库交互的过程判断,直接的因素就是数据库返回或存取的时间。
有统计表明,百分之八十以上的Oracle数据库优化都应集中在对应用程序的优化上。
所以,建立高性能的数据库应用程序是数据库开发和应用成功的关键。
本文将在理解Oracle体系结构的基础上重点探讨一些在Oracle数据库应用程序建立及优化时遇到的常见问题,同时提供优化方案,以及Oracle发展趋势为建立高性能的Oracle数据库提供帮助。
随着信息技术的不断发展,信息数量以爆炸式速度增加,表现出数据总量不断增加、数据类型越来越复杂的趋势,这给信息的获取带来了一定的难度。
在基于数据库的应用系统中,查询操作是最常用的操作,查询的效率是系统的重要性能指标。
本文主要探讨了基于的Oracle数据库查询性能优化的方法,并以“移动话单查询”为实例进行分析,探究Oracle数据库在移动话单查询的作用与优势。
关键词:
移动话单查询,性能优化,Oracle
ResearchonOracledatabaseperformanceoptimizationmethods
ABSTRACT
Thedatabaseasthefoundationandthecoreofcomputerinformationsystem,intheirdailyworkandtheroleofproductionisbecomingmoreprominent,thedatabasetechnologyhasbeenrapiddevelopment.Inmanydatabaseproducts,Oracleseriesdatabasewithitsperfectperformanceiswidelyusedinvariousfieldsofenterpriseoffice,websiteconstruction.Withthecontinuousexpansionofthescaleofthedatabase,simpletocreatethedatabasecannotmeettherequirements,thefocusofmoreandmoreattentionisputonthedatabaseperformanceadjustment.
Oracleoptimizationistoincreasethroughput,reducesystemresponsetime,reducethebackgroundoftime.Tooptimizetheperformanceoftherangeisintwomainareas:
theOracledatabaseoptimization,optimizationofapplicationsystem.Databaseperformance,userswilldirectlyfromtheapplicationprogramandthedatabaseinteractionjudgment,directfactoristhedatabasereturnsoraccesstime.Statisticsshowthat,theOracledatabaseoptimizationofeightypercentaboveshouldbefocusedontheoptimizationofapplicationprogram.So,criticaldatabaseapplicationstoestablishhighperformancedatabasedevelopmentandapplicationofsuccess.ThispaperwillbebasedontheunderstandingofOraclearchitectureonthestudyofsomecommonproblemsintheestablishmentandoptimizationofOracledatabaseapplicationprogram,whileprovidingoptimizationscheme,andthedevelopmenttrendofOracleinhelpingtobuildahighperformanceOracledatabase.
Withthecontinuousdevelopmentofinformationtechnology,informationquantitywithexplosivespeedincrease,showtheincreasingamountofdata,datatypes,thetrendofmoreandmorecomplex,itbroughtcertaindifficultytoinformationaccess.Intheapplicationsystembasedondatabase,queryoperationisthemostcommonlyusedoperations,theefficiencyofthequeryisoneoftheimportantperformanceindexsystem.ThispapermainlydiscussestheperformanceofOracledatabasequeryoptimizationbasedonindexmethod,andthe"mobilequerybilled"asanexampletocarryontheanalysis,toexploretheOracledatabaseindexinmobilebilledinqueryfunctionsandadvantages.
keywords:
MobileBilledQuery,Index,Oracle
目录
1前言1
1.1索引优化1
1.1.1索引概念1
1.1.2索引的创建及其规则2
1.1.3索引的作用和优势3
1.2SQL优化4
1.3基本内容综述5
2移动话单查询应用分析5
2.1需求分析5
2.2开发工具选择6
2.2.1VisualStudio.NET平台简介6
2.2.2C#语言简介7
2.2.3Oracle简介8
3移动话单查询应用设计9
3.1系统逻辑结构9
3.2系统功能结构10
3.3开发及运行环境10
3.4数据库设计10
3.4.1数据表的结构10
3.4.2索引设计13
3.4.3SQL优化设计13
3.5系统的功能模块设计14
3.6系统的处理流程设计15
4移动话单查询功能模块介绍15
4.1系统登录界面15
4.2系统主界面18
4.3移动话费维护21
4.4索引优化23
4.5组合索引优化25
4.6SQL性能优化27
5系统测试29
6结束语29
参考文献31
致谢32
1引言
在应用系统中,尤其在联机事务处理系统中,对数据查询及处理速度已成为衡量应用系统成败的标准。
而采用索引来加快数据处理速度也成为广大数据库用户所接受的优化方法。
在良好的数据库设计基础上,能有效地使用索引是Oracle取得高性能的基础,Oracle采用基于代价的优化模型,它对每一个提交的有关表的查询,决定是否使用索引或用哪一个索引[]。
因为查询执行的大部分开销是磁盘I/O,使用索引提高性能的一个主要目标是避免全表扫描,因为全表扫描需要从磁盘上读表的每一个数据页,如果有索引指向数据值,则查询只需读几次磁盘就可以了。
所以如果建立了合理的索引,优化器就能利用索引加速数据的查询过程。
但是,索引并不总是提高系统的性能,在增、删、改操作中索引的存在会增加一定的工作量,因此,在适当的地方增加适当的索引并从不合理的地方删除次优的索引,将有助于优化那些性能较差的Oracle应用。
实践表明,合理的索引设计是建立在对各种查询的分析和预测上的,只有正确地使索引与程序结合起来,才能产生最佳的优化方案[]。
1.1索引优化
1.1.1索引概念
索引是一个单独的、物理的数据库结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单[]。
索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序。
数据库使用索引的方式与您使用书籍中的索引的方式很相似:
它搜索索引以找到特定值,然后根据指针找到包含该值的行。
根据索引的顺序与数据表的物理顺序是否相同,可以把索引分成两种类型:
聚集索引与非聚集索引。
按照实现的功能分,还有两种特殊的索引:
主键索引和唯一索引。
它们既可以采用聚集索引的结构,又可以采用非聚集索引的结构。
聚集索引数据表的物理顺序和索引表的顺序相同,它根据表中的一列或多列的值排列记录。
每一个表只能有一个聚集索引,因为一个表的记录只能以一种物理顺序存放,在通常情况下,使用的都是聚集索引[]。
聚集索引有利于范围搜索,由于聚集索引的顺序与数据行存放的物理顺序相同,因此,聚集索引最适合于范围搜索,因为相邻的行将被物理地存放在相同或相邻近的页面上。
对于非聚集索引,表的物理顺序与索引顺序不同,即表的数据并不是按照索引列排序的。
一个表可以同时存在聚集索引和非聚集索引,而且,一个表可以有多个非聚集索引。
主键索引又称主索引,以一个字段或多个字段的值排列记录。
主索引是一个表记录的唯一标识。
一个表只能有一个主索引[]。
主键索引自动被创建为聚集索引,但也可以把聚集索引设置为他字段其。
索引中不允许有两条记录有相同的索引值,也不允许记录的索引值为空(NULL)。
唯一索引不允许两行具有相同的索引值,可用于实施实体完整性,在已有数据的表上创建唯一索引时,如果在该列数据存在重复值,那么系统将返回错误信息。
在实际的编程应用中会经常使用到唯一索引。
因为在一个表中,可能会有很多列的列值需要保证其唯一性,如:
有身份证号、工号、学号等,可在这些列上创建唯一索引。
主索引在实施主键约束时自动创建。
系统会默认把主索引创建为聚集索引[]。
1.1.2索引的创建及规则
对所要创建的索引进行正确的判断,使所创建的索引对数据库的工作效率提高有所帮助。
为了实现这一点,我们应做到以下要求:
在熟记数据库程序中的相关SQL语句的前提下,统计出常用且对性能有影响的语句;判断数据库系统中哪些表的哪些字段要建立索引。
其次,对数据库中操作频繁的表,数据流量较大的表,经常需要与其他表进行连接的表等,要进行重点关注。
这些表上的索引将对SQL语句的性能产生重要的影响。
创建索引一般有以下两个目的:
维护被索引列的唯一性和提供快速访问表中数据的策略。
大型数据库有两种索引即簇索引和非簇索引,一个没有簇索引的表是按堆结构存储数据,所有的数据均添加在表的尾部,而建立了簇索引的表,其数据在物理上会按照簇索引键的顺序存储,一个表只允许有一个簇索引,因此,根据B树结构,可以理解添加任何一种索引均能提高按索引列查询的速度,但会降低插入、更新、删除操作的性能,尤其是当填充因子(FillFactor)较大时。
所以对索引较多的表进行频繁的插入、更新、删除操作,建表和索引时因设置较小的填充因子,以便在各数据页中留下较多的自由空间,减少页分割及重新组织的工作[]。
索引是从数据库中获取数据的最高效方式之一。
95%的数据库性能问题都可以采用索引技术得到解决。
作为一条规则,我通常对逻辑主键使用唯一的成组索引,对系统键(作为存储过程)采用唯一的非成组索引,对任何外键列[字段]采用非成组索引[]。
你得考虑数据库的空间有多大,表如何进行访问,还有这些访问是否主要用作读写。
实际上,您可以把索引理解为一种特殊的目录。
微软的ORACLE提供了两种索引:
聚集索引(clusteredindex,也称聚类索引、簇集索引)和非聚集索引(nonclusteredindex,也称非聚类索引、非簇集索引)。
下面,我们举例来说明一下聚集索引和非聚集索引的区别:
其实,我们的汉语字典的正文本身就是一个聚集索引。
比如,我们要查“安”字,就会很自然地翻开字典的前几页,因为“安”的拼音是“an”,而按照拼音排序汉字的字典是以英文字母“a”开头并以“z”结尾的,那么“安”字就自然地排在字典的前部。
如果您翻完了所有以“a”开头的部分仍然找不到这个字,那么就说明您的字典中没有这个字;同样的,如果查“张”字,那您也会将您的字典翻到最后部分,因为“张”的拼音是“zhang”。
也就是说,字典的正文部分本身就是一个目录,您不需要再去查其他目录来找到您需要找的内容。
索引创建通常有如下创建规则:
在经常进行连接,但是没有指定为外键的列上建立索引,而不经常连接的字段则由优化器自动生成索引。
在频繁进行排序或分组(即进行groupby或orderby操作)的列上建立索引。
在条件表达式中经常用到的不同值较多的列上建立检索,在不同值少的列上不要建立索引。
比如在雇员表的“性别”列上只有“男”与“女”两个不同值,因此就无必要建立索引。
如果建立索引不但不会提高查询效率,反而会严重降低更新速度。
如果待排序的列有多个,可以在这些列上建立复合索引(compoundindex)。
1.1.3索引的作用和优势
为什么要创建索引呢?
这是因为,创建索引可以大大提高系统的性能。
第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因。
第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
第四,在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。
索引建立之后,还要确保其得到了真正的使用,发挥了其应有的作用。
首先,可以通过SQL语句查询来确定所建立的索引是否得到了使用,找出没有使用到的索引。
分析索引建立但没有使用的原因,使其真正发挥作用。
其次,索引得到使用以后,是否得到了预期的效果,对数据库的性能是否实现了真正意义上的提高,只有合理的索引才能真正提高数据库的性能。
“水可载舟,亦可覆舟”,索引也一样。
索引有助于提高检索性能,但过多或不当的索引也会导致系统低效。
因为用户在表中每加进一个索引,数据库就要做更多的工作。
过多的索引甚至会导致索引碎片[]。
所以说,我们要建立一个“适当”的索引体系,特别是对聚合索引的创建,更应精益求精,以使您的数据库能得到高性能的发挥。
1.2SQL优化
可以通过使用直接的OLEDB数据库连接方式。
通过ADO可以使用两种方式连接数据库,一种是传统的ODBC方式,一种是OLEDB方式。
ADO是建立在OLEDB技术上的,为了支持ODBC,必须建立相应的OLEDB到ODBC的调用转换,而使用直接的OLEDB方式则不需转换,从而提高处理速度。
使用ConnectionPool机制在数据库处理中,资源花销最大的是建立数据库连接,而且用户还会有一个较长的连接等待时间。
解决的办法就是复用现有的Connection,也就是使用ConnectionPool对象机制。
ConnectionPool的原理是:
IIS+ASP体系中维持了一个连接缓冲池,这样,当下一个用户访问时,直接在连接缓冲池中取得一个数据库连接,而不需重新连接数据库,因此可以大大地提高系统的响应速度[]。
高效地进行SQL语句设计通常情况下,可以采用下面的方法优化SQL对数据操作的表现:
(1)减少对数据库的查询次数,即减少对系统资源的请求,使用快照和显形图等分布式数据库对象可以减少对数据库的查询次数。
(2)尽量使用相同的或非常类似的SQL语句进行查询,这样不仅充分利用SQL共享池中的已经分析的语法树,要查询的数据在SGA中命中的可能性也会大大增加。
(3)限制动态SQL的使用,虽然动态SQL很好用,但是即使在SQL共享池中有一个完全相同的查询值,动态SQL也会重新进行语法分析。
(4)避免不带任何条件的SQL语句的执行。
没有任何条件的SQL语句在执行时,通常要进行FTS,数据库先定位一个数据块,然后按顺序依次查找其它数据,对于大型表这将是一个漫长的过程。
(5)如果对有些表中的数据有约束,最好在建表的SQL语句用描述完整性来实现,而不是用SQL程序中实现。
(6)可以通过取消自动提交模式,将SQL语句汇集一组执行后集中提交,程序还可以通过显式地用COMMIT和ROLLBACL进行提交和回滚该事务。
(7)检索大量数据时费时很长,设置行预取数则能改善系统的工作表现,设置一个最大值,当SQL语句返回行超过该值,数值库暂时停止执行,除非用户发出新的指令,开始组织并显示数据,而不是让用户继续等待。
1.3基本内容综述
本课题主要研究数据库索引的作用和优势,并通过Web应用程序移动话单查询来进行论证。
研究手段:
结合实际的应用以及理论知识的要求,设计出满足需求的数据库,并且,在具体应用中,从查询数据库中表的数据来探讨索引的作用和优势,例如在移动话单组合查询中使用索引前后的效率对比。
实际应用将采用ASP.NET技术,C#语言。
数据库使用Oracle。
2移动话单查询应用分析
移动话单查询是一个典型的大数据量查询实例,如何让用户在数以亿计的数据记录中快速查看自己的话单记录,关系到用户感受和体验,影响深远。
2.1需求分析
通过实际分析,本应用应具有以下功能:
(1)大数据量查询
(2)移动话单查询列表,支持多条件查询。
(3)查询耗时统计功能
(4)索引禁用启用功能,以方便对比使用索引前后的查询速度
(5)SQLServer清除缓存功能,保证测试的有有效性和科学性
2.2开发工具选择
本应用数据库采用Oracle,该数据库系统在安全性、准确性、运行速度方面有绝对的优势,并且处理数据量大、效率高;选择以.NET平台作为开发平台,以C#作为开发语言,采用VisualStudio2010作为主要的开发工具,可与Oracle数据库无缝连接。
2.2.1VisualStudio.NET平台简介
VisualStudio.NET是一套完整的开发工具,用于生成ASPWeb应用程序、XMLWebservices、桌面应用程序和移动应用程序。
VisualBasic.NET、VisualC++.NET、VisualC#.NET和VisualJ#.NET全都使用相同的集成开发环境(IDE),该环境允许它们共享工具并有助于创建混合语言解决方案。
另外,这些语言利用了.NETFramework的功能,此框架提供对简化ASPWeb应用程序和XMLWebservices开发的关键技术的访问[]。
VisualStudio .NET集成开发环境现在包括开发智能设备(如PocketPC)应用程序的工具。
通过使用这些工具和.NETFramework精简版(.NETFramework的子集),您可以在个人数字助理(PDA)、移动电话和其他资源受约束的设备中,创建、生成、调试和部署在.NETFramework精简版上运行的应用程序。
ASP.NET移动设计器扩展了ASP.NET和.NETFramework,可用来生成移动电话、PDA和寻呼机的Web应用程序。
此设计器集成在VisualStudioIDE中。
您可以创建移动Web应用程序,使用移动设计器修改移动Web页面,然后生成和运行该应用程序(所有这些操作都是在VisualStudio中完成的)。
Web页面是用于创建可编程Web页的ASP.NET技术。
Web页面将自己呈现为浏览器兼容的HTML和脚本,这使任何平台上的任何浏览器都可以查看Web页。
使用Web页面,通过将控件拖放到设计器上然后添加代码来创建Web页,与创建VisualBasic页面的方法相似。
Windows页面是用于MicrosoftWindows应用程序开发的、基于.NETFramework的新平台。
此框架提供一个有条理的、面向对象的、可扩展的类集,使您能够开发功能丰富的Windows应用程序。
另外,Windows页面可作为多层分布式解决方案中的本地用户界面。
XMLWebservices是可以通过HTTP使用XML接收请求和数据的应用程序。
XMLWebservices不受特定组件技术或对象调用约定的制约,因此可由任何语言、组件模型或操作系统访问[]。
在VisualStudio.NET中,可以使用VisualBasic、VisualC#、JScript、C++的托管扩展或ATLServer快速创建和包含XMLWebservices。
可扩展标记语言(XML)提供描述结构数据的方法。
XML是SGML的子集,非常适合在Web上传送。
万维网联合会(W3C)定义了XML标准以使结构化数据保持统一并独立于应用程序。
VisualStudio.NET完全支持XML,提供了XML设计器以使编辑XML和创建XML架构更容易。
ASP.NET ASP.NET建立在.NETFramework的编程类之上,它提供了一个Web应用程序模型,并且包含使生成ASPWeb应用程序变得简单的控件集和结构。
ASP.NET包含封装公共HTML用户界面元素(如文本框和下拉菜单)的控件集。
但这些控件在Web服务器上运行,并以HTML的形式将它们的用户界面推送到浏览器。
在服务器上,这些控件公开一个面向对象的编程模型,为Web开发人员提供了面向对象的编程的丰富性。
ASP.NET还提供结构服务(如会话状态管理和进程回收),进一步减少了开发人员必须编写的代码量并提高了应用程序的可靠性。
另外,ASP.NET使用这些同样的概念使开发人员能够以服务的形式交付