浅析SQL Server数据库性能优化

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:zfk710867322
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:该文根据作者多年从事数据库应用系统开发及教学方面的经验,分析了SQL Server数据库在三个层次的性能优化及其注意事项,并介绍了进行性能优化所使用的工具。
  关键词:数据库;性能;优化
  中图分类号:TP311文献标识码:A文章编号:1009-3044(2012)23-5516-02
  Analysis of SQL Server Database Performance Optimization
  GAO Shui-juan
  (Department of Electronic Information Engineering,Nanjing Communications Institute of Technology, Nanjing 211188,China)
  Abstract:According to the author for many years engaged in the database application system development and teaching experience, analysis of the SQL Server database in three levels of performance optimization and its attention to matters, and introduced the optimization tools.
  Key words:database;performance;optimization
  SQL Server作为一种重要的关系型数据库,具有和强大的管理功能和安全性能,被广泛应用于后台数据库,在数据库应用系统中,数据库的性能对整个软件的性能起着重要的决定作用,因此,如何提高数据库的性能,是当前研究的重点。
  一个应用软件与数据库管理系统结合起来构成了一个非常复杂的系统,它的许多不同的方面都可以被优化。最低层次的性能优化是硬件层次的调优。为了提高性能,系统必须提供大量的主存空间、足够多的CPU和二级存储设备,以备足够的通信能力。数据库管理系统处于上一层,这一层的性能问题包括磁盘中的物理数据组织、缓冲区管理等。这个层次的决策很大程度上是数据库管理员的管理范围,因此应用程序员只能间接对其产生影响。SQL代码和模式处于最高层,在这一层进行性能优化涉及的问题包括如何表达一个查询、创建什么样的索引等。
  该文并不是对如何优化数据库性能作详尽的阐述,而是根据作者这几年从事数据库应用系统开发及教学方面的经验,提出以下三个方面对数据库性能优化有所增益,以供大家参考。
   1高速缓存调优
  我们先来了解一下高速缓存是如何工作的。高速缓存是数据库管理系统内部的主存缓冲区,最近被访问的数据库页被存放在高速缓存中,当事务访问一个数据库数据项的时候,数据库管理系统将包含这一项的数据库磁盘页读入高速缓存,然后把这一项的值从高速缓存拷入应用程序缓冲区。这一页通常被保留在高速缓存中,我们可以合理假设,应用程序稍后更新这个数据项或读取同一页中另外一项的可能性非常大,或者另外一个应用程序可能在并行地访问这一页中的一项,由于可以直接从高速缓存中访问这一页,这两种情况都可以节省一次磁盘访问。如果一个数据库数据项被更新,包含这一项的数据库页必须先被读入高速缓存,高速缓存中的这一页就是被修改的页的高速缓存版本。最终高速缓存将被填满,从数据库中获取的任何一个新页必须覆盖高速缓存中的一页p,如果自从p被读入高速缓存还没有被修改过,高速缓存页的内容与数据库页的内容是一致的,因此新的一页可以直接覆盖它。然而如果自从p被读入高速缓存后被更新过,在其占据的高速缓存页被覆盖前必须将其写回数据库。那么应用程序设计人员及数据库管理员如何优化数据库管理系统利用高速缓存的方式来提高应用程序的性能呢?
  1)SQL Server数据库管理系统允许高速缓存的一部分被分割出来,作为一个独立的高速缓存。然后程序员可以把一个特定的数据库数据项与这个分出来的高速缓存绑定在一起,以便这个数据库数据项的所有页都被缓冲在高速缓存中。例如,T1表和T2表被绑定在不同的高速缓存中,T1表的一页便不可能覆盖T2表的一页。如果对T2表的访问不太频繁但访问它的应用需要快速的响应,这个方法是可行的。
  2)SQL Server数据库管理系统允许把一个特定的高速缓存分割成几个大小不同的缓冲区池。例如在默认情况下,高速缓存中的缓冲区大小可能为2K,我们可以重新分配高速缓存,分别创建大小为2K、4K、8K的缓冲区池。如果一个表被装入这样的高速缓存,查询优化器可以选择每次I/O传输的数据量的大小,使其更加适应访问这个表的查询计划。
  3)SQL Server数据库管理系统提供了可以指定某个特定高速缓存的页替换策略的命令,在利用多个高速缓存的时候,这个命令尤其有用。可以利用这个命令指定对高速缓存中的数据项进行替换的恰当策略。
   2模式调优
  当我们为一个特定应用设计的数据库模式处于应用的核心时,如果模式设计得好,可能设计出高效的SQL语句。我们在应用层的调优策略首先就应该是设计一个规范化的数据库,并估计表的大小、属性值的分布、查询的特征及其执行频率,以及可能对数据库执行的更新等。对规范化的模式进行调整以提高操作的执行效率是依赖于上述这些估计的。添加索引、反向规范化及分片都是重要的调优方法。
  1)索引
  索引看上去可能是最重要的数据库调优技术,但索引也带来了相关的存储开销。更为重要的是,额外的索引可能极大地增大对数据库进行修改的语句的处理时间,这是因为每当索引对应的表被更新的时候,对应的索引也要更新。当创建索引而带来性能增益时,我们也要思考这是否足以补偿处理对表进行修改的语句的额外开销。因此在创建索引时我们要作如下考虑:   (1)由于一个表最多只能有一个聚集索引,我们不能将这个索引浪费在不能利用聚集索引的优势的属性上。数据库管理系统通常在主码上创建了一个聚集索引,但主码上的非聚集索引也能确保主码值的唯一性,因此如果我们不想按照主码对行进行排序,我们就不应该在主码上创建聚集索引。用另外一个聚集索引替换一个已经存在的聚集索引也是一件非常耗时工作,因为在这个过程中包含对存储结构的完全重组。所以应该事先对应用进行分析,考虑应用可能会执行哪些查询以及每个查询的执行频率,从而创建一个可能带来最大收益的聚集索引。
  (2)只有获取整个表的很少一部分行的时候,利用非聚集索引才是恰当的。如果获取整个表的大部分行,全表扫描是恰当的。另外如果属性值倾向于在域内均匀分布,不要在对应一个较小的域的列上创建索引。
  (3)聚集把可能作为一个结果集输出的行组合在一起是非常有用的。这些行能够被组合在一起是因为这些行在一个属性上具有相同的属性值,或者这些行在一个属性值上的属性值都落在一个范围内。在各种情况下,当必须选择在哪个属性上进行聚集时,应该基于对应用程序对应的结果集的大小的估计来进行选择。
  2)反向规范化
  反向规范化是指通过一个表中添加冗余信息来设法提高只读查询的性能。这个过程是关系规范化的逆过程。应用程序设计的开始步骤之一就是表的设计,表是数据存储的载体,因此在设计之初就应该做好规范化工作。非规范化关系存在着许多的缺点,但有时候为了性能的优化,却不得不按昭反向规范化思想来设计关系模式。这主要是应用在某些特定的查询,如不需要经常更新的关系,反向规范化反而能提高效率。因此在设计档案数据时采用反向规范化方法,在设计在线数据时采用规范化方法。
  3)分片
  通过显式地把一个表分成多个片段,这样可以把表中频繁访问的数据与很少访问的数据区分开来,从而降低访问非常大的表的开销。利用水平分片,每个片段具有相同的列集合,包含了整个表的所有行的一个子集。对行进行分片都基于把所有行划分成不相交的子集,如在学生信息表中可以将已毕业的学生和当前在读的学生分成两个片段,因为对当前在读的学生的访问量要大得多的多。利用垂直分片,表中所有列的子集构成了一个片段。当一个表有很多列的时候,这可能是有用的,因为这样的表包含很多行,每一行中的某些列都很少被访问。如果没有分片,当获取所需要的列对应的数据的时候,还要把不需要的列对应的数据从磁盘中传入缓冲区,这严重降低了性能。是否分片,必须要权衡,因为在分片的情况下,付出的代价就是增加了访问及管理多个表的额外复杂性,因此只有在性能收益非常明显的情况下才能使用这个技术。
   3数据操纵语言调优
  数据库的查询效率是衡量数据库性能的一个重要的指标,但SQL Server的查询会消耗大量资源,在保证查询效率的同时也产生了一些负面的影响,下面就如何优化查询和提高查询性能提出以下见解。
  1)避免排序
  排序的开销很大,所以尽量避免排序。我们首先要了解哪些类型的查询可能导致查询优化器在查询计划中引入排序,这样可以避免执行这类的查询。消除重复包含了排序操作,因此除非对应用来说非常重要,否则不要用DISTINCT关键词;集合操作(如UNION及EXCEPT)也会引入排序操作以消除重复;对于处理ORDER BY子句来说排序是不可避免的,因此应该考虑清楚对结果排序是不是必须的。
  2)避免不必要的扫描
  在WHERE子句中包含“不等于”条件可能会导致一次扫描,对于WHERE LIKE等条件仍旧需要表扫描。因此在查询子句中最好避免这样的条件出现。
  3)使通信量最小化
  通常,客户机与服务器之间的通信开销非常大,因此应该尽可能地降低通信开销。带来通信开销的主要原因之一是利用游标,每获取一行都要引发一次通信,因此在更新一个表时设法利用UPDATE语句,而不是获取一行后修改并写回。另外在检索聚集信息时,可以利用存储过程计算聚集,只返回结果值到客户端,如果必须在应用程序代码中分析表中的每一行,就要检查使用的数据库管理系统是否支持一次获取多行,我们所使用的SQL Server数据库正是支持这一应用的,所以就可成组获取以降低通信开销。
   4调优工具
  数据库管理系统供应商提供了各种用于对数据库进行调优的工具。这些工具通常情况下需要创建一个试验数据库,在这个数据库里对各种查询执行计划进行试验。在大多数数据库管理系统中,一个这样的典型工具是EXPLAIN PLAN语句,使数据库管理系统生成一个查询执行计划,并把这个查询执行计划当成一个元组集存储在PLAN_TABLE关系中,然后可以通过执行对PLAN_TA BLE表的查询来获取这个查询执行计划。基于文本的查询执行计划的检测功能非常强大,但是目前只有热衷于这种方式的人才使用。大多数数据库管理系统都提供了图形界面的调优工具,如微软提供了Query Analyzer工具,这些工具不仅显示查询计划,而且能够建议你创建索引以提高各种查询的执行速度。
  参考文献:
  [1]魏银珍,陈征兵. SQL Server数据库的查询优化策略研究[J].电脑知识与技术2011(7).
  [2]徐丽媛,张亚宾.基于SQL Server数据库查询优化的几点思考[J].科技信息2010(20).
  [3]李荣瀚.SQL Server数据库性能优化[J].科技探索,2011(3).
  [4]余秋风.试论SQL Server数据库性能的优化[J].信息与电脑,2012(4).
  [5]吴春庆.数据库性能优化主要方法[J].硅谷,2010(3).
  [6] Robert Vieira.SQL Server2005高级程序设计[M].北京:人民邮电出版社,2008.
  [7]杨晖.SQLServer数据库性能优调技术分析[J].信息与电脑,2011 (11).
  [8]年玮.SQLSERVER数据库性能优化分析[J].信息与电脑,2010 (8).
其他文献
摘要:任职教育士官学员普遍存在自主探究学习能力不足的问题,对此,以《计算机应用基础》课程为例,提出通过课程教学内容、教学方法和考核方式等方面的一系列改革,适度引入探究教学,激发学员学习兴趣,培养学员的学习主动性和探究学习能力,进而提升教学效果。  关键词:士官学员;自主探究学习能力;计算机应用基础  中图分类号:G64 文献标识码:A 文章编号:1009-3044(2014)35-8504-02 
摘要:随着对软件需求的不断增大,要求的不断提高,软件开发机构迫切地需要一种能够更有效地开发更高质量软件的方法。统一软件过程RUP是一种用例驱动,以架构为中心,采用迭代增量方式开发的软件工程过程。RUP作为一种通用的软件过程框架,适用于大多数的软件项目,而信息系统的开发,也需要引入一种适当的开发过程作为指导,以提高质量、开发效率和复用性等。  关键词:RUP;软件过程;用例驱动;核心工作流  中图分
摘要:服务外包人才培训基地的成立,为郴州职业技术学院高职教育发展提供了全新的机遇,同时也面临着挑战。通过郴州职业技术学院服务外包人才培养现状的分析,为学院更好的培养服务外包人才提供了建议和对策。  关键词:服务外包;职业技术学院;人才培养  中图分类号:TP3 文献标识码:A 文章编号:1009-3044(2013)08-1840-02  近年来,服务外包产业迅猛发展,服务外包已成为国际服务产业转
摘要:随着商业银行ATM终端数量的不断增多及其使用频率的增加,ATM终端的安全隐患也日渐凸显,其中以离行式ATM终端尤为严重。该文分析了离行式ATM终端的风险因素及其成因,结合笔者的从业经验,提出相应的防范策略。  关键词:离行式ATM机;重要性;安全;维护策略  中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2013)17-3936-03  离行式ATM机,是银行为更好地
摘要:信息技术与美学艺术关系密切,目前,高一学生的美学素养较低 ,成为优化信息教学的瓶颈,因此需要在信息技术教学中,渗透艺术美学教育。教师要提升美学修养,课前精心准备、课堂教学中创设优美的教学情境、精选美的课堂案例和素材、穿插专业美学知识教学,评价、展示美的作品,在教学各个环节渗透艺术美教育,技术教育与艺术教育相融合,最终打造优质、美感、滋润学生心田的信息技术课堂。  关键词: 信息技术; 美学;
摘要:C程序设计是计算机专业及相关专业的一门重要的基础课,是多门后续课程的基础。为提高学生的编程能力,本文讨论了C程序设计教学中存在的一些问题,并给出了解决问题的方法。另外,本文提出了利用通项公式或递推公式求和及在黑板上调试程序的思想。   关键词:C语言程序设计;问题探讨;累和的求解;调试程序  中图分类号:G642文献标识码:A文章编号:1009-3044(2008)21-30493-02  
摘要:PBL教学法是一种以学生为主体、问题为导向的教学方法。该文意在《信息系统项目管理》课程教学中引入该教学法,从而提高该课程的授课质量,提升教学水平,使学生更加积极、主动地参与学习,提高学生的动手能力、理论与实践的综合应用能力、分析解决问题的能力,使学生能提高利用计算机来解决现实生活中遇到实际问题的能力,即使走上工作岗位以后也可以利用所学的计算机知识解决专业领域遇到的问题,也能使该课程更好地围绕
传统课堂教学范式一般遵循以下过程:首先是情境导入,课文朗读;其次教师分析文章结构,分析人物形象,对语句含义进行赏析;最后是小结、作业。这一过程往往以教师为中心,教师所充当的角色是知识的传递者而非启发者,学生学习的主动性被弱化或忽视,创新性得不到激发,课堂气氛也不活跃。相较于传统课堂,翻转课堂则以学生为中心,注重学生的主动性,将知识的学习放在课前,知识的巩固放在课中,学生学习的积极性明显提高。  一
摘要:胡健散文集《美丽的濡湿》既是他洞明世事、人情练达的阅历呈现,也是其个性风格的生动写照。胡健的散文无论是对自然风情的诗性描绘,还是对历史遗迹的理性点击,或是对风云人物的褒贬抑扬,都蕴含着深厚浓烈的人文情怀。  关键词:胡健散文 文化  引言  茂密的林木在若隐若现的云层笼罩下倒映在碧绿的水中,在水天相连的素淡辽阔背景下,一位勤劳的渔翁正撑着一只月牙般的简陋小木船,摇曳在涟漪阵阵的清澈河流中,船
摘要:该文分析了数字媒体专业学生在三维动画设计的学习过程中所暴露出来的问题,针对这些问题, 提出了三维动画设计课程的一系列改革,并经过实践证明, 取得了很好的效果。  关键词:数字媒体专业;改革;实践  中图分类号:G424 文献标识码:A 文章编号:1009-3044(2013)18-4273-01  1 存在问题  在多年的教学中笔者发现,许多学生在学习一些基础课程时容易上手,兴趣很浓,可是一