sqlserver实训报告

2024-07-03

sqlserver实训报告(精选8篇)

sqlserver实训报告 第1篇

经过一个学期的SQL Server 20xx课程的学习,老师在课堂上耐心、细致的讲解,以及内容详细、层次鲜明、易于记忆和理解的教学课件,让我了解了SQL Server 20xx的基础知识,学会了创建数据库以及对数据库操作的一些基本应用,现就所学到知识作出以下的学习心得总结:

SQL Server是一个关系数据库管理系统,SQL Server 20xx是Microsoft公司推出的SQL Server数据库管理系统的一个版本,具有使用方便,可伸缩性好与相关软件集成程度高等优点,可跨越从运行Microsoft Windows 98的膝上型电脑到运行Microsoft Windows 20xx的大型多处理器的服务器等多种平台使用。

SQL Server 20xx的特性包括:

1.Internet集成:SQL Server 20xx数据库引擎提供完整的XML支持。它还具有构成最大的Web站点的数据存储组件所需的可伸缩性、可用性和安全功能。SQL Server 20xx程序设计模型与Windows DNA构架集成,用以开发Web应用程序,并且SQL Server 20xx支持English Query和Microsoft搜索服务等功能,在Web应用程序中包含了用户友好的查询和强大的搜索功能。 2.可伸缩性和可用性:同一个数据库引擎可以在不同的平台上使用,从运行Microsoft Windows? 98的便携式电脑,到运行Microsoft Windows 20xx数据中心版的大型多处理器服务器。SQL Server 20xx企业版支持联合服务器、索引视图和大型内存支持等功能,使其得以升级到最大Web站点所需的性能级别。

3.企业级数据库功能:SQL Server 20xx关系数据库引擎支持当今苛刻的数据处理环境所需的功能。数据库引擎充分保护数据完整性,同时将管理上千个并发修改数据库的用户的开销减到最小。SQL Server 20xx分布式查询使您得以引用来自不同数据源的数据,就好象这些数据是SQL Server 20xx数据库的一部分,同时分布式事务支持充分保护任何分布式数据更新的完整性。复制同样使您得以维护多个数据复本,同时确保单独的数据复本保持同步。可将一组数据复制到多个移动的脱接用户,使这些用户自主地工作,然后将他们所做的修改合并回发布服务器。

4.易于安装、部署和使用:SQL Server 20xx中包括一系列管理和开发工具,这些工具可改进在多个站点上安装、部署、管理和使用SQL Server的过程。SQL Server 20xx还支持基于标准的、与Windows DNA集成的程序设计模型,使SQL Server数据库和数据仓库的使用成为生成强大的可伸缩系统的无缝部分。这些功能使您得以快速交付SQL Server应用程序,使客户只需最少的安装和管理开销即可实现这些应用程序。

SQL Server 20xx中包括析取和分析汇总数据以进行联机分析处理(OLAP)的工具。SQL Server中还包括一些工具,可用来直观地设计数据库并通过English Query来分析数据。

数据库的内容是从数据表的创建和修改开始的,数据表的建立关系数据库的基本结构,它用来存储数据具有已定义的属性,在数据表的操作中有:查看表的信息、查看表的属性、修改表当中的数据、删除表当中的数据以及修改、删除表的操作,从课程的学习和实验当中我了解到,表是数据库数据当中最重要的一个数据对象,表建立的好坏直接关系到数据库的实际使用效果,表当中的内容越具体对表越有利,同时对数据库的各种应用也有着各种各样的便利,但是表的内容也不能过于的繁琐,当然,这些也只能在今后的实际使用当中多多的应用,才能加深和理解如何对表进行规划才更有利于使用和查询。在数据库中,数据内容的查询可以使用查询语句的方法查询,也可以使用视图操作的方法进行查询,使用视图操作的方法不仅可以简化数据操作,同时还可以检索数据,在查询时还能向基表当中添加、修改和删除数据,能有效的提高数据库可用性和安全性。

SQL Server 20xx的学习是在老师的悉心教导和上机实验实践当中度过的,经过短暂的学习,让我学会了很多知识,对于我今后的人生和工作有很多有用有帮助的地方,感谢老师的教导,让我又多掌握了一项专业的技术,我会在今后更加努力的学习这方面的专业技术知识,勤于实践、不断提高,以适应时代的发展,更好的把握未来。

sqlserver实训报告 第2篇

1 SQL Server对XML的支持

微软的数据库产品是从SQL Server 2000开始提供对XML的支持。SQL Server 2000对XML的支持主要包括以下几个方面:把关系数据显示为XML;把XML文档分割到行集中;用XDR模式把XML模式映射到数据库模式;用XPATH查询XML;用HTTP查询SQL Server数据。实际上SQL Server 2000主要通过映射的方式, 使XML数据与关系型数据产生一个对应。但是这有一些局限性, 例如不提供原生XML支持等等。在SQL Server 2005中, 解决了许多这样的限制。对XML的支持主要有6个方面的改进:新的XML数据类型;在XML类型列上建立索引;提供了XQuery支持;增加了XML DML (数据修改语言) ;对FOR XML和OPENXML的Transact-SQL增强;HTTP SOAP访问。SQL Server 2OO5中的XML支持给企业应用程序开发带来了极大的便利。

2 XML数据类型

SQL Server 2005最重要的新特性就是添加了XML数据类型。这种新的数据类型支持在SQL Server数据库中存储XML文档和XML片段, 还可以用Transact-SQL变量来存储XML。总体来说, XML数据类型有4种主要的用法:用做列类型;用做变量类型;用做参数类型;用做函数返回类型。

XML数据类型提供了5种方法用于支持XML实例的查询和修改。这5种方法分别是query () , value () , exist () , nodes () 和modify () , 下面分别介绍这5个方法的使用。

1) query () :query () 方法通过对XML实例中的元素和属性测评一个XQuery表达式来执行查询, 返回的结果是一个无类型XML。

2) value () :value () 方法用于提取一个XML实例 (如XML数据类型列、变量或参数) 的某个节点的值, 它返回XQuery表达式计算的值。

3) exist () :exist () 方法能够检查XML实例中某个指定的XML片段是否存在。如果存在, 返回值为1, 如果不存在, 返回值为0。

4) nodes () :nodes () 方法指定哪些节点映射到一个新的数据集的行。其一般语法规则如下所示:Nodes (XQuery) as Table (Column)

XQuery是一个表达式, 如果表达式的结果为一个节点, 那么节点包含在结果集中, 如果表达式的结果为空, 那么结果集也为空。Table (Column) 指定最终结果集中的表名和列名。

5) modify () :modify () 方法用于修改XML类型的变量或列。这个方法把一个XML DML (XML数据修改语言) 语句作为一个参数来执行必要的操作, 可以在一个XML实例内插入、更新或删除内容。

3 SQL Server 2005对FOR XML语句的增强

SQL Server中的FOR XML语句提供了将相关数据转换成XML的功能。在SQL Server 2000中, FOR XML提供了三种模式:RAW、AUTO和EXPLICIT, 每一种模式中用户都可以指定相关数据以什么样的XML格式返回, 并用每种模式具有不同的复杂性。下面讨论SQL Server 2005对FOR XML语句的增强。

1) 新的TYPE指令:在SQL Server 2005中, 通过给FOR XML语句最后添加TYPE指令, 能够指定FOR XML语句的结果作为一个XML数据类型返回, 而没有添加TYPE指令的结果是以一个nvarchar (max) 数据类型返回。

2) RAW模式增强:在SQL Server 2005中, 对RAW模式做了一定的改进和增强以使其更实用。对RAW模式的增强主要包括:在XML结果中指定根元素的能力;指定元素名称 (替代默认的) 的能力;返回以元素为中心的XML的能力。

数据库中有一个张表employees, 其结构如图1所示。

对这表employees进行查询。输入下面的查询语句, 结果如图2所示。

对查询语句进行修改如下:

得到的结果如图3所示, 从图中可以看出, 查询结果增加了根元素employees, 并且原来的元素变成

3) PATH模式:FOR XML语句的EXPLICIT模式对于XML结果的格式化具有很强的灵活性, 但使用起来非常麻烦。因此, 在SQL Server 2005中引入了PATH模式, PATH模式可以用简单得多的查询来生成XML结果并对其进行格式化。通过PATH模式, 可以轻松处理属性和元素。

4) 嵌套的FOR XML

在SQL Server 2000中, FOR XML子句只能用于外层或顶层SELECT语句中, 并且不支持嵌套的FOR XML。而在SQL Server 2005中, 提供了嵌套的FOR XML, 可以对FOR XML查询返回的结果做更好的格式化。

4 总结

本文针对SQL Server 2005对XML的新增及改进的支持特性进行了分析, 文中所有实例在SQL Server 2005下测试通过。首先介绍了SQL Server 2005中新增的XML数据类型。然后着重讨论了XML数据类型的五个方法query () , value () , exist () , nodes () 和modify () 的使用方法。接着讨论了SQL Server 2005对FOR XML语句的增强, 内容主要包括新的TYPE指令的引入, RAW模式增强, 增加了PATH模式和支持嵌套的FOR XML语句。

摘要:当前主流的数据库产品都宣布了对XML的支持, 微软的数据库产品是从SQL Server 2000开始支持XML的, 但是这个版本的SQL Server对XML的支持还存在较多的局限性。在SQL Server 2005中, 对XML的支持做出了许多重要的改进。针对SQLServer 2005对XML改进的支持特性进行了分析。

关键词:SQL Server 2005,XML,支持特性,XML,FORXML

参考文献

[1]Scott Klein.SQL Server 2005 XML高级编程[M].北京:清华大学出版社, 2007.

[2]Akmal B, Rashid A, Zicari R.XML数据管理[M].北京:清华大学出版社, 2006.

sqlserver实训报告 第3篇

关键词:汽车运用与维修 实训教学 一体化

加强职业院校学生实践能力和职业技能的培养,高度重视实践和实训教学环节,是《国务院关于大力发展职业教育的决定》中的要求。为了做好笔者学校汽车运用与维修专业实训教学工作,为职业教育改革做出贡献,笔者和同事一起在2013年对辽宁汽车运用与维修专业实训教学做了调研工作。

一、调查方式

1.实地调查

调查组在2013年6月~11月期间,对辽宁省5所有影响力的中等职业学校进行实地调查。

2.电话和网络采访调查

调查组利用网络、电话及骨干教师培训的机会对辽宁省20多家中等职业学校汽车运用与维修专业的负责人、骨干教师进行了采访。

二、调查结果

我们所调查的中职学校的汽车运用与维修专业中,实训教学主要采用的模式有:理实一体化实训教学、校内生产性实训教学、企业生产性实训教学等。实训教学存在的问题如下。

1.专业素养未融入实训教学

大部分学校在实训教学中没有特别强调融入培养学生良好的专业素养的内容。

2.“双师型”教师不足

实训车间授课教师既要有丰富的理论知识,又要具有丰富的实践经验,也就是“双师型”教师。教师授课时,示范动作的可视范围小,如果一个教学班按40~60人的班型设置的话,则至少应该配备3名“双师型”教师。所以原来按照一个教学班设置一名教师的师生比例,不能很好地满足实训的需要,致使实训教学效率降低。

3.实训工位和参加实训的学生人数比例不当

随着汽车技术的不断发展,特别是一些高新技术在汽车领域的不断运用,使得汽车运用与维修专业涉及面广,而汽车车系品种又繁多,并且各具特色,在采购教学设备时,考虑到资金的限制及学习系统性需求,造成许多学校实训工位欠缺,影响实训教学效果。

4.教学环境影响教学协调性

教学环境不利于教学和实训,带来了教学的不协调,比如:在东教学楼学习再到西教学楼练习,学习与练习的场地距离较远,带来管理与教学的不便。

5.实训阶段割裂,没做到有机结合

有些学校各个实训阶段割裂,没有做到有机结合。例如,有的学校企业生产性实训交给了就业部门,而就业部门与教学部门缺乏沟通与交流,不利于提高实训的效果。

三、调查结果的启示与建议

1.在实训教学中融入专业素养的培养

作为为现代汽车企业培养初、中级技能型人才的汽车运用与维修专业,更要将职业特色教育作为教育的重点,那么,根据现代企业的要求,培养的学生不仅要具备出色的汽车专业技能而且还要具备抗挫折能力、创新能力、再学习能力。这就要求在实训教学的课程中融入专业素养的培养。

2.运用现代化教学手段,实现理论与仿真实训一体化教学

充分运用现代化教学手段,实现理论教学与仿真实训一体化。理实一体化教学是我国职业教育大力提倡的一种适合职业教育的教学方法,它打破了传统的一支粉笔,一块黑板的教学,开创了我国职业教育的新时代。但是,现阶段师资和设备的不足,造成如果直接实行理论和实操一体化教学,会大大影响教学效果。由于仿真实训教学所需的计算机可以和其他专业资源共享,容易满足每人一个工位的需求,而且操作次数可以无限增加。如果在实操之前先进行理论教学与仿真实训一体化教学,使在学生实操实训之前,充分地掌握其实训的操作步骤及其注意事项,减少实操失误,就能提高实训效果。例如,笔者校汽车专业在讲解发动机拆装的工艺过程时,先利用某公司制作的丰田发动机仿真拆装教学软件,将发动机拆装的步骤、方法,甚至螺栓拧紧的扭矩、顺序、使用什么工具,按照专业的维修手册,进行理论与仿真实训一体化教学,在实操时少走弯路,取得了很好的教学效果。

3.建立合理的实训教学环境

如建立专门的理实一体室、仿真实训室、校内实训基地,与企业合作,建立企业生产性实训基地。加强校企合作,建立企业生产性实训基地还可以有效地缓解校内实训设备的不足,缩短学生所学技能与企业对他们技能需求的距离。

4.教学过程循序渐进,有机结合

实训教学要由易到难,分层逐步,循序渐进,有机结合。例如,要有基本的零部件认识实训、拆装实训,也要有专业性较强的技能专门化实训。

5.大力培养“双师型”教师

加大“双师型”教师的培养力度,不仅做到数量够,而且素质要高,教师的理论和实践技能要适应专业人才培养的需求。

参考文献:

[1]常小勇.高职院校产学研合作教育现状与对策分析[J].中国高教研究,2008(2).

[2]吴云溪.高职汽车专业实训基地建设模式探索与实践[J].职业教育研究,2009(8).

职业中专实训报告格式设计 第4篇

一、条文式实训报告

条文式实训报告的格式包括基本部分和条文部分。以电工实训报告为例, 基本部分包括姓名、学校、班级、实训时间、实训地点、指导教师等基本情况介绍。条文部分包括实训目的、实训内容、实训结果、实训总结等项目。

实训目的不仅宜简明扼要, 而且要具体, 从学生成长和专业发展的角度制定, 对学生的学习起到激励和指引作用。以电工实训报告为例, 实训目的应该有总目的:电工实训是学生从学校走向社会工作岗位的一个纽带和桥梁, 是由学生角色向工人角色转换的训练和检验。具体的课堂目的:通过实训习得实际生产知识和安装技能, 掌握继电器控制线路及其元件的工作原理, 电工技术知识及掌握电子线路的基本原理、基本方法。素质与能力目的:培养学生理论联系实际的能力, 提高分析问题和解决问题的能力, 增强独立工作能力, 使学生团结合作, 共同探讨, 共同前进。

对于实训内容, 教师要以教案形式填写, 最主要的是按学生的认识程序安排教学过程。以电工实训报告为例, 电工工具的认识和使用、兆欧表的使用方法和注意事项、电动机的传动和点动控制电路、电动机的顺序控制电路、电动机的正反转控制电路。学生要按学习过程填写, 叙述自己实训的主要内容。

对于实训结果, 教师从总结教学经验的角度撰写, 从教法、学法, 从学生的收获的角度分条述说, 以便对以后的教学有所帮助。学生从实训收获的角度撰写本部分内容, 教师给予适当指导。以电工实训报告为例。学生可以从知识技能方面去写:掌握了几种基本的电工工具的使用, 导线与导线的连接方法, 导线与接线柱的连接方法;了解了电路安装中走线、元件布局等基本常识。可以从能力方面去写:本次实习大大增强了我们的团队合作精神, 培养了我们的动手实践能力和细心严谨的作风。也可以从素质方面去写:这次实习给我们上了一堂很有意义的社会实践课, 在很大程度上提高了我们的综合素质, 使我们的理论知识能融入实践当中, 让我对所学专业更有信心。

也可以引导学生去关心一些必须关心的问题。以钳工实训为例。要进行钳工实训, 安全问题肯定是摆在第一位的。通过师傅的讲解, 教师了解了实训中学生易犯的危险的操作动作。比如在车间里打闹嬉戏, 不经师傅的许可便私自操作机床, 以及操作时方法、姿势不正确, 等等。一个无意的动作或是一个小小的疏忽, 都可能导致机械事故甚至人身安全事故。

条文式实训报告也可以不必拘泥于形式, 根据学生学习的实际情况可以增减一些内容。如学生对所学内容概念不清, 在实训报告开始应设计概念, 让学生在实训前填写。以会计实训报告为例:“会计是———对会计单位的经济业务从数和量两个方面进行计量、记录、计算、分析、检查、预测、参与决策、实行监督, 旨在提高经济效益的一种核算手段, 它本身也是经济管理活动的重要组成部分。”

对于学生有混淆的地方, 教师要加以区分。

二、表格式实训报告分为简式和详式

简式表格实训报告的表头包括班级、学号、姓名、课程、指导教师、实训题目、时间、地点等基本部分。条文内容包括实训目的及要求、实训设备及仪器、实训内容及步骤、实训结果、收获及体会等。下面是简式表格实训报告样例。

详式包括封面、扉页和正文。封面包括报告名称、班级、姓名、实训地点、指导教师、实训时间等基本部分。扉页包括填写说明或实训注意事项。扉页根据需要可要可不要。正文部分包括实训目的、实训准备、实训要求、实训内容 (步骤及程序) 、实训结果 (结果分析) 、实训心得。附:指导教师评语、实训报告成绩、指导教师 (签字) 和年月日等。下面是详式表格实训报告样例 (见文末) 。

总之, 通过填写实训报告要让学生明白实训目的及意义。帮助学生在实践中成长。让学生明白知识和安全知识的学习重要性, 把理论与实践相结合;了解各部门日常工作, 亲自体验, 并学会自我总结;提高沟通及人际关系处理能力。丰富专业知识, 积累工作经验, 为以后走上工作岗位打基础。找到自身不足之处, 早日弥补, 增强自己适应社会的能力。

实训是学生走向社会的第一步, 其中充满着磨砺与再学习的机会。要让学生在实训中真正在熟悉自我、完善自我, 在实训中熟悉社会、服务社会。

摘要:在中等职业学校的语文教学中, 如何让学生会写实训报告, 关键是让他们掌握实训报告的格式。为此, 笔者在本文中简单地介绍了条文式和表格式两种实训报告的格式设计。

sqlserver实训报告 第5篇

关键词:SQL;数据库;完整性;约束

中图分类号:TP311文献标识码:A文章编号:1007-9599 (2013) 05-0000-02

数据完整性的提出是为了解决数据库中存在不符合语义规定的数据或者因错误信息的输入、导人造成对数据的无效操作或错误信息。它需要做到两点:一是保证数据库中数据的正确性;二是保证其可靠性。

1数据完整性概念

所谓的数据完整性是指数据库中的数据的准确性和兼容性,如果两个或更多的表由于其存储的信息而相互关联,那么只要修改了其中一个表,与之相关的所有表都要做出相应的修改,如果不这么做,存储的数据就会不再准确,也就是说,失去了数据的完整性。

2数据完整性的意义

数据完整性要求数据库中的数据具有准确性,准确性是通过数据库表的设计和约束来实现的。为了实现完整性,数据库需要做至少以下两方面的内容,一是检验每行数据是否符合要求,二是检验每列数据是否符合要求。

数据库中的数据的来源都是外界的输入。因此数据库中的数据来源具有不可确定性和难控制性。数据在输入时会因为人为粗心等等各种不确定的原因导致数据的不正确。为了能够有效地利用数据库去管理数据,确保输入数据符合业务规定,关系型数据库系统尤其是多用户的关系型数据库系统就必须依靠数据完整性来保证。数据完整性与应用程序的数据结构中存储和使用的实际值有关。应用程序必须对使用您的数据的每个进程进行有意控制,以确保信息持续准确。

数据的完整性

目的防止数据库中存在错误数据

防范对象不合语义的、不正确的数据

操作方法对数据进行标准化

定义业务规则

提供引用完整性

验证数据

3SQLServer提供的约束类型

数据库是否具备数据完整性关系到数据库系统是否能真实地反映现实世界。SQLServer数据库管理系统提供了检查数据库数据合法性机制,为实现上述要求,SQLServer提供了四种类型的约束。

3.1实体完整性约束

实体完整性要求表中的每一行数据都反映不同的实体,不能存在相同的数据行。通过索引、唯一约束、主键约束、或标示列属性,可实现表中的实体完整性。

3.2域完整性约束

域完整性是指給定列的输入有效性。通过限制数据类型、检查约束、输入格式、外键约束、默认值、非空约束等多种方法,可以实现表的域完整性。

3.3引用完整性约束

在输入或删除数据行时,引用完整性约束来保持表之间已定义的关系。

在强制引用完整性时,SQLServer禁止用户进行如下操作:(1)当主表中没有关联的记录时,将记录添加到子表中。(2)更改主表中的值并导致子表中的记录孤立。(3)从主表中删除记录,但子表仍存在与该记录匹配的相关记录。

引用完整性通过主键和外键之间的引用关系来实现。

3.4自定义完整性约束

用户自定义完整性用来定义特定规则。

4数据库完整性应用案例

下面以学生信息管理系统数据库的设计为例,数据库包含表1Student表、表2Subject表、表3Result表、表4Grade表,其中表1Student表包含字段为StudentNo、StudentName、Sex、GradeId、Phone、Address、BornDate、Email、IdentityCard;表2Subject表包含字段为SubjectNo、SubjectName、ClassHour、GradeId;表3Result表包含的字段为StudentNo、SubjectNo、StudentResult、ExamDate;表4Grade表包含的字段为GradeId、GradeName。下面我们来讨论一下这四种类型的约束。

根据实际需要,可以对各表进行如下约束:

4.1对表Student进行约束

ALTERTABLEStudent--主键约束

ADDCONSTRAINTPK_StuNoPRIMARYKEY(StudentNo)

ALTERTABLEStudent--唯一约束(身份证号唯一)

ADDCONSTRAINTUQ_stuIDUNIQUE(IdentityCard)

ALTERTABLEStudent--默认约束(地址不详)

ADDCONSTRAINTDF_stuAddressDEFAULT('地址不详')FORAddress

ALTERTABLEStudent--检查约束(出生日期是自1980年1月1日以后)

ADDCONSTRAINTCK_stuBornDateCHECK(BornDate>='1980-1-1')

ALTERTABLE Grade ADDCONSTRAINTPK_GradeIDPRIMARYKEY(GradeID)

ALTERTABLEStudent--添加外键约束

ADDCONSTRAINTFK_Grade FOREIGNKEY(GradeID)REFERENCESGrade(GradeID)

4.2对表Subject进行约束

ALTERTABLESubject--主键约束(课程编号)

ADDCONSTRAINTPK_SubjectPRIMARYKEY(SubjectNo)

ALTERTABLESubject--非空约束(课程名称)

ADDCONSTRAINTCK_SubjectNameCHECK(SubjectNameisnotnull)

ALTERTABLESubjectWITHNOCHECK--检查约束(学时必须大于等于0)

ADDCONSTRAINTCK_ClassHourCHECK(ClassHour>=0)

ALTERTABLESubject--外键约束(主表Grade和从表Subject建立引用关系)

ADDCONSTRAINTFK_GradeId

FOREIGNKEY(GradeId)REFERENCESGrade(GradeId)

4.3对表Result进行约束

ALTERTABLESubject--主键约束(课程编号)

ADDCONSTRAINTPK_SubjectPRIMARYKEY(SubjectNo)

ALTERTABLESubject--非空约束(课程名称)

ADDCONSTRAINTCK_SubjectNameCHECK(SubjectNameisnotnull)

ALTERTABLESubjectWITHNOCHECK--检查约束(学时必须大于等于0)

ADDCONSTRAINTCK_ClassHourCHECK(ClassHour>=0)

ALTERTABLESubject--外键约束(主表Grade和从表Subject建立引用关系)

ADDCONSTRAINTFK_GradeId

FOREIGNKEY(GradeId)REFERENCESGrade(GradeId)

参考文献:

[1]陈增祥.SQLServer数据库数据完整性的研究与分析[J].信息安全与技术,2012,1.

[2]朱喜梅.基于SQLServer数据库的性能调优策略与研究[J].哈尔滨理工大学,2009.

[3]张莹.SQLServer中实体完整性的实现方法[J].电脑与电信,2011,7.

[作者简介]楚书来(1982-),男,河南沈丘人,周口职业技术学院讲师,主要从事计算机专业教学;张鹏伟(1976-),男,河南商水人,周口职业技术学院讲师,研究方向:软件开发。

探究SQLSERVER存储过程 第6篇

1 存储过程概述

存储过程是SQL Server中一个非常有用的工具。简单的说,存储过程是一组预先写好的能实现某种功能的T-SQL程序,是存储在服务器上的预编译集合。我们可以在存储过程中声明变量、有条件地执行以及其他各项强大的程序设计功能。存储过程可以接受输入参数、输出参数,返回单个或多个结果集以及返回值,由应用程序通过调用执行。存储过程是独立存在于表之外的数据对象。可以由客户调用,也可以从另一个过程或触发器调用,参数可以被传递和返回,出错代码也可以被检验。

1.1 存储过程的优点

1)存储过程可提高数据库执行速度。存储过程在执行1次后,其执行计划就保存在内存中,以后每次执行存储过程都不需再重新编译和优化,而我们通常使用的SQL语句每执行一次就编译一次。

2)提供一种安全机制。将存储过程用在安全性上就是利用其“授权”的特性,因为存储过程就像数据库中的其他对象,可以限制用户访问存储过程中涉及到的表的权限,只授予执行存储过程的权限,用户只能通过存储过程来访问表,从而保证了数据的安全性。

3)减少网络流量。由于存储过程是存在服务器上的一组T-SQL,在客户端调用时,可以只用一条调用语句即可执行。

4)允许模块化程序设计。每个存储过程就是一个功能模块,只需创建一次并以代码形式存储在数据库中,方便了维护及应用。

提高系统的可维护性。SQL Server中存储过程是以T-SQL程序形式存在的一种数据库对象,所以它的创建和删除都很简单,并且不会影响到库中的其他数据对象。在数据库设计过程中有些业务的计算规则发生变化时,只需要修改或重写对应的服务器存储过程就可以了,从而提高了系统的可维护性。

1.2 CLR存储过程

在SQL Server 2000中,只有一种创建存储过程的方法:即T-SQL语句。之前的每个SQL Server版本都采用这个程序。而在SQL Server 2005中,我们可以用.NET家族的语言——主要是VB.NET和C#来编写存储过程即CLR存储过程。

1.2.1 CLR模式来编写存储过程的优点

CLR模式来编写存储过程的优点主要是速度。SQL CLR在很多方式下都运行较快:比如字符串处理,它比T-SQL运行快很多,并且对于错误的处理能力也更加强大。同时,由于CLR所提供的来执行这些事务的框架都更为完善,因此任何需要与数据库之外资源进行事务交互的存储过程——比如,文件系统或者Web服务等CLR存储过程都是表现最好的。

1.2.2 CLR适合编写哪些类型的存储过程

一般来说,在数据库上执行繁重计算而不是仅仅是查询数据的存储过程最适合用CLR。如果一个CLR存储过程只是封装一个复杂的SELECT语句,那么我们将无法看到显著的性能增益,因为每次运行存储过程时,都必须验证CLR中的SQL语句。事实上,它比将SELECT语句作为T-SQL存储过程处理表现还要差。这时如果需要执行的SQL的行数很多,那么可以将SQL封装在一个常规的存储过程上。如果想要在一个大的数据集上运行CLR风格的处理,那么我们可以在CLR存储过程内部调用一个常规的存储过程来获取这个大的数据集。这样,常规的存储过程会被预编译,性能也会更好,同时数据转换性能也会有所提高。

2 优化存储过程

存储过程可提高数据库执行速度,但是一个经过优化过的存储过程要比一个性能差的存储过程的效率要高。所以在编写存储过程时应该注意从以下几点进行优化。

2.1 SET NOCOUNT ON选项

我们使用SELECT语句时,除了返回对应的结果集外,还会返回相应的影响行数。使用SET NOCOUNT ON后,除了数据集就不会返回额外的信息了,减小网络流量。

2.2 使用确定的Schema

使用表,存储过程,函数等等时,最好加上确定的Schema。这样可以使SQL Server直接找到对应目标,避免去计划缓存中搜索。而且搜索会导致编译锁定,最终影响性能。比如:Select*from dbo.table1比select*from Test Table要好。from T table1e会在当前Schema下搜索,如果没有,再去dbo下面搜索,影响性能。而且如果你的表是csdn.table1的话,那么select*from table1会直接报找不到表的错误。所以写上具体的Schema也是一个好习惯。

2.3 优化SQL查询语句

查询优化可以提高系统的效率。开发人员在提交存储过程前,必须已经使用set showplan on分析过查询计划,做过自身的查询优化检查。尽量避免大事务操作,提高系统并发能力。SQL Server支持并发操作。如果事务过多过长,或是隔离级别过高,都会造成并发操作的阻塞,死锁。此时现象是查询极慢,同时cup占用率极低。

尽量避免反复访问同一张或几张表,尤其是数据量较大的表,可以考虑先根据条件提取数据到临时表中,然后再做连接,访问这个临时表;注意where语句的写法,必须考虑语句顺序,应该根据索引顺序、范围大小来确定条件子句的前后顺序,尽可能的让字段顺序与索引顺序相一致,范围从大到小;不要在where子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引;条件子句尽量使用“>=”,不要使用“>”;尽量使用exists代替select count(1)来判断是否存在记录,count函数只有在统计表中所有行数时使用,而且count(1)比count(*)更有效率;注意表之间连接的数据类型,避免不同类型数据之间的连接;

2.4 尽量避免使用游标

因为游标的效率较差。SQL是个集合语言,对于集合运算具有较高的性能,而Cursors是过程运算。比如对一个100万行的数据进行查询,游标需要读表100万次,而不使用游标只需要少量几次读取。如果使用了游标,就要尽量避免在游标循环中再进行表连接的操作。

2.5 合理的使用索

索引的创建要与应用结合考虑,建议大的OLTP表不要超过6个索引。尽可能的使用索引字段作为查询条件,尤其是聚簇索引,必要时可以通过index index_name来强制指定索引,避免对大表查询时进行table scan,必要时考虑新建索引。在使用索引字段作为条件时,如果该索引是联合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用。要注意索引的维护,周期性重建索引,重新编译存储过程。

2.6 自定义存储过程不要以sp_开头

因为以sp_开头的存储过程默认为系统存储过程,所以首先会去master库中找,然后在当前数据库找。建议使用USP_或者其他标识开头。

2.7 合理的算法使用

根据上面已提到的SQL优化技术和ASE Tuning手册中的SQL优化内容,结合实际应用,采用多种算法进行比较,以获得消耗资源最少、效率最高的方法。

3 存储过程可作为安全机制使用

使用存储过程,在防非法注入方面提供更好的保护。存储过程在执行前,首先会执行预编译,编译出错则不会执行,这在某种程度上提供一层天然的屏障。使用存储过程而不是直接访问基表,可以提供更好的安全性。你可以在行级或列级控制数据如何被修改。相对于表的访问,你可以确认有执行权限许可的用户执行相应的存储过程。这也是访问数据服务器的惟一调用途径。因此,任何偷窥者将无法看到你的SELECT语句。换句话说,每个应用只能拥有相应的存储过程来访问基表,而不是“SLEECT*”。

对SELECT、INSERT、UPDATE和DELETE语句的访问限制可以通过上下文设置更加严格的数据访问级别。另外存储过程可以加密:假如您的数据库服务器是托管的或租用的,竞争对手无意登上您的SQL Server,或通过注入得到了您的存储过程,将您的业务逻辑进行破坏,而恰巧您五分钟前又没做备份,那会结果不堪设想。如果您对存储过程进行了加密,那正常手段他无法获得您的存储过程。存储过程的加密非常简单,但在加密存储过程前应该备份原始存储过程,且加密应该在部署到生产环境前完成。加密方法就是在存储过程创建时加as前加with encryption。

4 结束语

存储过程是SQL Server数据库管理系统的一项重要功能。它增强了SQL语言的功能效率和灵活性,可以根据用户的设置完成从简单的查询到应用程序逻辑控制的任何事情。这不仅能提高应用系统的运行效率,还可以增强系统的可维护性,保证数据的安全可靠。所以充分利用它的存储过程功能,是对数据库管理系统功能的有力扩充。

摘要:在数据库开发过程中,常会遇到复杂的业务逻辑和数据库操作,这时就需用存储过程来对其进行封装。文章主要对SQLSERVER存储过程进行了简单的概述,提出了创建存储过程的其他方法及注意的问题,并对存储过程的安全性保护以及存储过程的的优化进行了剖析。

关键词:SQL Serve,存储过程,CLR,优化,安全性

参考文献

[1]陆鑫.存储过程及其应用方法[J].计算机应用,1999,19(2):12-14.

[2]Spenik M.SQL Server2000数据库管理员指南[M].刘谦,苏建平,译.北京:机械工业出版社,2002.

[3]温春明.SQLServer存储过程研究[J].福建电脑,2007(5).

sqlserver实训报告 第7篇

关键词:SQLServer2008;高可用性;故障转移群集

中图分类号:TP311.13 文献标识码:A 文章编号:1674-7712 (2013) 12-0000-01

在SQLServer2008数据库中,它自身具有很多的高可用性解决方案。如可以采用故障转移群集、数据库镜像、日志传送或者复制等手段来提高数据库的高可用性。由于解决方案多了,数据库管理员不得不掌握各个解决方案的优点与缺陷,然后根据企业的实际应用来选择合适的解决方案。

一、故障转移群集

故障转移群集可对整个SQLServer实例的高可用性提供支持。故障转移群集由具有两个或多个共享磁盘的一个或多个节点(服务器)组成。每个Microsoft群集服务(MSCS)的群集组(称为在“资源组”)中均安装有应用程序(如SQLServer)和NotificationServer。在任何给定的时间点,每个资源组仅属于群集中的一个节点。应用程序服务具有与节点名称无关的“虚拟名称”,因此它将作为虚拟服务器来引用。应有程序可以通过引用虚拟服务器的名称方法连接到虚拟服务器,并不需要知道虚拟服务器的宿主是哪一个节点。

SQLServer虚拟服务器将像单个计算机一样显示在网络中,不过,它还具有一种功能,在当前节点不可用时,可以在节点之间进行故障转移。例如,在发生非磁盘硬件故障、操作系统故障或进行计划的操作系统升级时,可以在故障转移群集的一个节点上配置SQLServer实例,使其故障转移到磁盘组中的任意其他节点。故障转移群集不能防止磁盘故障。可以使用故障转移群集来减少系统停止时间,提供较高的应用程序可用性。SQLServer2008EnterpriseEdition和DeveloperEdition均支持故障转移群集。StandardEdition也支持故障转移群集,但有一些限制。

二、数据库镜像

数据库镜像实际上是一个软件解决方案,可提供几乎是瞬时的故障转移,以提高数据库的可用性,数据库镜像用来维护相应的读写数据库(称为“主体数据库”)的单个“热”备用数据库(或“镜像数据库”)。通过还原但不恢复主体数据库的完整备份可创建镜像数据库。客户端不能访问镜像数据库。但是,为了进行报告,可创建镜像数据库的数据库快照来间接地使用镜像数据库,数据库快照为客户端提供了快照创建时对数据库中数据的只读访问。

每个数据库镜像配置均包括一个主体服务器(包括主体数据库)、一个镜像服务器(包涵镜像数据库)和一个见证服务器,其中见证服务器是可选的。镜像服务器不断地使镜像数据库随主体数据库一起更新。从主体数据库到镜像数据库的故障转移是真正瞬时完成的。

数据库镜像所带来的可用性等级比以前使用SQLServer所能到达的可用性等级有了大幅提升,并提供了故障转移群集这一易于管理的可选方案。数据库镜像与日志传送相比,其优点在于:它是一种同步的“无数据丢失”配置,是本地支持的简单的故障转移策略。SQLServer2008EnterpriseEdition支持数据库镜像,StandardEdition也支持数据库镜像,但是有一些限制。

三、日志传送

與数据库镜像一样,日志传送是数据库级操作。日志传送可用来维护相应的读写数据库(称为“主数据库”)的“暖”备用数据库(称为“辅助数据库”)。通过还原但不恢复主数据库的完整备份可创建辅助数据库。

日志传送配置包括一个主服务器(包含主数据库)、一个或多个辅助服务器(每个服务器包含一个辅助数据库)和一个监视服务器,每个辅助服务器从“主数据库”的日志备份以固定的时间间隔更新辅助数据库,在发生从主数据库到其中一个辅助数据库的故障转移之前,必须手动完全更新辅助数据库。在还原期间,辅助数据库具有有限的可用性,因此它们可能不能用于进行报告。

日志传送具有支持多个备用数据库的灵活性。如果需要多个备用数据库,可以单独使用日志传送或将其作为数据库镜像的补充。当这些解决方案一起使用时,当前数据镜像配置的主体数据库同时也是当前日志传送配置的主数据库。而且,日志传送允许用户将延迟时间定义为:从主服务器备份主数据库日志到辅助服务器必须还原日志备份之间的时间。SQLServer2008EnterpriseEdition、StandardEdition和WorkgroupEdition均支持日志传送。

四、复制

复制使用的是发布一订阅模式,即由主服务器(发布服务器)向辅助服务器(订阅服务器)发布数据。复制可在这些服务器间提供实时的可用性和可伸缩性。他支持筛选,以便为订阅服务器提供数据子集,同时还支持分区更新。订阅服务器处于在线状态,并且可用报告或其他功能,而无需进行查询恢复。SQLServer提供了3种复制类型:快照、事务以及合并;事务复制的滞后时间最短,在要求高可用性的情况下最常用。SQLServer2008的所有版本都支持复制。SQLServer2008的所有版本都支持复制。SQLServeExpress或SQLServerMobile不提供复制发布功能。

SQLServer2008高可用性技术的特点:

选择高可用解决方案前,应该清楚高可用解决方案的优点和缺点。

(1)故障转移群集和数据库镜像可提供的功能。包括自动检测和故障转移、手动故障转移和透明客户端重定向功能。此外,故障转移群集具有以下限制:需要在服务器实例作用域内进行操作;硬件需经过认证;备用部分不具有报告功能;仅利用数据库的单个副本;不能防止磁盘故障。

(2)数据库镜像的限制。需要在数据库作用域内操作;利用数据库的单个副本和复制副本。如果需要其他副本,除了数据库镜像之外,还可以对数据库使用日志传送;需使用标准服务器;只能使用数据库快照对镜像服务器进行有限的报告;同步操作时,为了提供零工作丢失,将在主体数据库上延迟提交。

(3)日志传送提供的功能。支持多个服务器实例上的多个辅助数据库;允许用户将延迟时间定义为:从主服务器备份主数据库日志到辅助服务器必须还原日志备份之间的时间。

(4)复制具有的行为。在数据库作用域中进行操作,支持在数据库中进行筛选,以便为辅助数据库提供数据子集;支持多个冗余数据库副本;支持在多个数据库间实现实时的可用性和可伸缩性,支持分区更新;支持辅助数据库对报告或其他功能的完全可用性,而无需查询恢复。

总之,在企业的实际应用中选择合适的解决方案是非常重要的,这不仅仅是在考验SQLServer2008高可用性解决方案的优劣性,也是在验证数据库管理员的技术水平。

参考文献:

[1]康会光,马海军,李颖.SQLServer2008中文版标准教程[M].北京:清华大学出版社,2009,03,01.

[2]郑阿奇,刘启芬,顾韵华.SQLServer数据库教程(2008版)[M].北京:人民邮电出版社,2012,04,01.

SQLServer性能优化实战 第8篇

之前发表的一篇笔者从理论的角度介绍了SQL Server性能优化分析的各个方面,包括SQL Server性能优化目标、影响SQL Server性能发挥的因素、SQL Server性能优化工具、SQL Server性能优化策略和步骤。本篇从实践的角度精选了笔者工作过程中遇到的SQL Server性能优化方面的案例,以及对于这些案例的处理方法。希望和广大读者交流,以期共同进步。

2 案例分析一

2.1 案例背景

医院有一个录入居民健康档案的小系统,主要功能是给社区居民建立健康档案等工作。系统规模不大,C/S结构的程序,后台使用SQL Server2000数据库。最近录入人员反映系统使用越来越慢,经常程序失去响应。

2.2 案例分析

笔者试用了一下该系统,确实很慢,查询不大的数据要等5、6分钟,有时候系统还报‘超时已过期’的错误,录入数据也很慢。据使用人员反映,一年多以前系统刚上线的时候,一切正常,最近越用越慢。一般系统使用一段时间后,可能会有响应速度变慢的现象,但是使用一年多响应速度就显著变慢,还是不正常的,而且这个系统规模不算很大,应用也比较简单,最主要的事实表中也就是存放居民个人健康档案的信息,大概有三千多条记录,这样的系统,如果响应速度需要5、6分钟的样子,肯定是有某些性能方面问题的。

笔者试过换一台客户端,重新运行程序,结果现象没有改善。这说明不是客户端的问题。问题应该出在服务器端。打开SQL Server2000的企业管理器,点击数据库的属性对话框,切换到数据文件和事务日志文件标签,发现有一个异常情况,这个数据库的数据文件很小,只有几百兆,而事务日志文件很大,有70GB。再看一下属性对话框的选项标签中的故障还原模型,是‘完全模式’。这说明这个数据库可能从创建到现在都没有备份过事务日志。因为这个系统是一个小系统,每隔一段时间也进行完全数据库备份,所以故障还原模型没有必要选择‘完全模式’。把故障还原模型修改为‘简单模式’,再运用收缩数据库功能把数据库收缩。再查看数据库的事务日志,已经缩小至100MB以下了。重新运行系统,响应速度恢复正常。

2.3 案例小结

这是一个由于故障还原模型设置不合适导致的性能问题。故障还原模型选择‘完全模式’,一般用于大型生产数据库。对数据保护比较严格。但是一定要把事务日志备份纳入日常的备份计划中。否则事务日志只增加不较少,很快就会造成性能和磁盘空间不足等问题。如果对数据保护不太很严格的情况,可以考虑选择‘简单模式’的故障故障还原模型。这样在检查点的时候,SQL Server进程会自动截断事务日志,不会造成磁盘空间不足等问题。维护相对比较简单。

3 案例分析二

3.1 案例背景

医院检验科信息系统(LIS)给病人打印化验结果报告单的时候,第一次打印较慢,大约需要2、3分钟。重打就快很多,大概需要几十秒就可以打印。医院LIS服务器和HIS服务器均采用Windows 2003企业版的32位操作系统、SQL Server20005的数据库。LIS服务器配置8G内存,2颗CPU,8路计算单元。HIS服务器配置32GB内存,4颗CPU,16路计算单元。

3.2 案例分析

首先查看LIS服务器。从任务管理器中看内存使用率不高。8GB的内存,使用不到2GB,这个是有问题的。查看SQL Server设置的最大内存是多少,检查是否是由于限制了SQL Server的最大使用内存引起的。用sp_configure'max server memory'命令查看SQL Server最大内存,显示是服务器内存8G.说明SQL Server最大可完全使用8G服务器内存,这一点是没有问题的,但是为什么内存使用率偏低这么多呢?考虑到服务器是使用Windwos2003的32位操作系统,要查看服务器的/PAE选项和SQL Server的AWE选项是否打开。因为任务管理中Windows检测出了物理内存是8G,所以操作系统的/PAE选项应该是打开的。用sp_configure'awe enabled'命令查看SQL Server的AWE选项,发现AWE选项是关闭的。用sp_configure'awe enabled',1命令启用AWE,并将Windows高级用户权限“Lock Pages in Memory”授予SQL Server服务账户。重新启动服务器或SQL Server服务后更改的设置生效。

在做了这些设置以后,又运行几天之后观察,任务管理器中内存使用率已经上升至正常范围,但是LIS系统第一次打印化验结果报告单还是响应速度慢,现象没有显著改善。说明影性能的原因可能还有其他的因素。考虑到操作人员反映是一个月以前才有的这个现象,而笔者在那个时间段是修改过LIS系统后台的存储过程了的。考虑是不是因为作者修改后台存储过程引起的性能变慢。

一个月前,LIS的操作人员提出,想在化验报告单上加入患者年龄信息。而患者年龄是要根据出生日期推算出来的。患者的出生日期信息是在HIS数据库中存储,LIS数据库中并没有患者的出生日期信息。这就要跨数据库查询操作。笔者修改了打印报告单的后台存储过程,直接在存储过程中判断是否有患者的出生日期,如果有,说明已经从HIS数据库中读取过相关信息,直接根据出生日期推算出年龄,并显示在打印模板中。如果LIS数据库中没有出生日期,则从HIS数据库中读取,并把出生日期信息存储到LIS数据库中。这个算法本身也许是造成LIS第一次打印报告响应速度慢的原因。笔者把打印报告存储过程放到查询分析器里执行,并打开‘显示执行计划’选项。执行存储过程,发现跨数据库读取HIS出生日期的语句占用整个执行计划资源的90%。这就是响应速度慢的原因所在。将存储过程恢复成以前的模式,不读取HIS数据库中的数据。并把LIS操作员对LIS系统的需求提交给软件公司,软件公司的开发人员修改了LIS程序,在调入病人信息的时候,通过前台程序把患者的出生日期信息读入并写入LIS数据库。从而彻底解决了LIS使用者的需求。

3.3 案例小结

这个案例的启发是:(1)有时候影响SQL Server性能发挥的因素有很多,比如这个案例,SQL Server的AWE选项没有打开,还有后台存储过程中不合适的跨库操作,都有可能导致性能的下降。要一个个耐心排除。(2)解决一个问题的方案可能有很多种,要从中挑选一个合适的方案。(3)软件公司对于系统的售后维护和支持是很重要的。(4)修改的程序要留有备份,要有文档。

4 案例分析三

4.1 案例背景

因医院的HIS系统已经上线运行3年了,最近一段时间总是感觉比较慢,特别是上午9点到12点之间,感觉响应速度比较慢。查询统计报表也比较慢。查询一个月全院门诊收入和住院收入,以前可能需要2、3分钟就能出结果,现在需要5、6分钟才能有结果显示。门诊医生工作站系统和住院医生电子病历系统也没有系统刚上线的时候响应速度快。

4.2 案例分析

在系统使用高峰期的时候,即上午9点到12点期间,用任务管理器查看服务器CPU使用情况和内存使用情况。发现CPU使用率平均达到90%以上,内存使用达到28GB以上。又通过性能监视器监视针对对象System的计数器%Total Processor Time,该计数器在连续一段时间内超过90%。监视针对对象SQL Server:Buffer Manager的计数器Total Server Memory和Target Server Memory。第一个计数器指出SQL Server服务当前使用了多少内存。它包括提交到SQL Server缓冲区和OS缓冲区的总数。第二个计数器指出要让SQL Server高效运行需要多少内存,它基于SQL Server保留的缓冲区数量。

监测发现Total Server Memory计数器大于Target Server Memory,表明SQL Server可能存在内存压力。在高峰期用sp_who查看SQL Server进程,发现有进程的blk大于0,表明有阻塞情况。过几秒钟再次运行sp_who,相同位置的阻塞消失,但有其他的进程又有阻塞。种种情况表明,服务器在高峰期存在压力。考虑到HIS数据库已经有100GB的容量了,可以从以下方面做改进:

(1)数据分区技术。因为主要的业务数据记录已经有几百万条。可以考虑使用数据分区技术,以改善查询性能。

(2)数据转储。将不常用的历史业务数据转储到另外的数据库,或者数据仓库中。以供数据挖掘和商业智能使用。

(3)增加硬件的投入。购买运算速度更快的服务器和更多的内存。或则在目前服务器上直接扩展CPU和内存。

目前选择的第二种方案,进行数据转储。将一年以前的住院数据和一年半以前的门诊数据转储到一个历史数据库中。转储后,HIS数据库容量缩小到30GB了。转储后,SQL Server响应速度有较大幅度的提高,查询一个月全院门诊收入和住院收入,基本上在3分钟之内可以有结果显示。

4.3 案例小结

在系统上线运行几年之后,数据库增大到100GB以上,如果查询和业务功能模块响应速度变慢,排除其他因素之后,可以对数据库进行分区或转储,以提高数据库响应速度和吞吐量。

5 案例分析四

5.1 案例背景

住院药房管理模块是医院HIS系统的一个子模块,在最近操作人员反应发药后,打印发药单的速度比较慢。经现场测试,点击发药按钮后,大概需要等待2至3分钟才能形成打印任务在打印队列中,随后打印机才打印。因为草药发药需要按病人发药,打印草药发药单。打印一个病人的单据需要2至3分钟,而医院有23个科室,每个科室平均50人左右,这样的速度确实是太慢了,严重影响住院草药房的正常业务运转,操作人员要求改进系统,提高发药打印的响应速度。

5.2 案例分析

经过现场询问操作人员,他们反映速度变慢是逐渐、渐进的。所以推测和数据库的数据量逐步增大有一定的关系。在数据量无法改变的情况下,考虑后台处理的存储过程和索引之类的有无可以优化和改进的地方。

用SQL Profiler追踪器跟踪后台运行的存储过程,查看是哪一个存储过程最耗时。结果发现,有一个名为“usp_zyyf_fydy_ex”的存储过程耗时2分10秒,拖累整个发药处理过程。这个“usp_zyyf_fydy_ex”的存储过程即为需要优化的对象。用sp_helptext查看这个存储过程的文本,发现这个存储过程的主要功能是为发药后的打印准备数据。该存储过程很长,一时间也没有办法确定到底是哪一段sql语句或者是哪个表、索引需要优化。这时,SQL查询分析器就可以派上用场了。将存储过程放在SQL查询分析器中执行,并将显示执行计划选项打开。可以清晰地发现,有一段SQL语句查询成本占到整个批处理成本的80%以上。该SQL语句文本如下:

该SQL语句有值得优化的地方,因为它使用了2个外连接。对于大数据量数据来说,要尽量避免外连接,因为外连接很占用服务器资源,不利于响应速度的提高。在必须要使用外连接的情况下,可以将外连接改造成UNION组成的内连接。不会影响查询后的结果。如下所示:

改造完成后,用SQL查询分析器再统计一次,查询成本降低为总成本的45%。经过药房操作人员测试,整个发药过程的速度有所提高。因为此SQL语句比较复杂,不知道该语句应用的索引是否有值得优化的地方。如果索引应用正确的话,查询速度应该会得到进一步的优化。将这个SQL语句放入到数据库引擎优化顾问(DTA)中执行,单击开始分析,显示分析进度,分析完毕后,DTA给出建议和报告。DTA建议增加几个索引和建立缺少的统计信息。按照DTA的建议建立了缺少的索引和统计后,整个查询成本降低为总成本的30%,整个发药打印响应速度提到到大概40秒钟就可以打印,用户极为满意。

5.3 案例小结

准确地找到优化目标是优化是否成功的关键所在。在这个过程中,SQL Profiler及SQL查询分析器都可以帮助你。用数据库引擎优化顾问建立索引的时候,要注意记录建立索引之前和之后的响应速度的变化,以评估建立索引的效果。要注意,维护索引也是需要开销的,因为多余的索引有可能会影响到插入或更新的速度,所以,要对建立的索引进行效果评估。

6 结语

SQL Server性能优化需要理论和实践相结合。文章中提到的几个案例分别从数据库的设置、跨数据库操作数据、海量数据的处理、存储过程及SQL语句优化、SQL Profiler及SQL查询分析器使用、索引优化等方面介绍了如何优化SQL Server,提高响应速度及吞吐量。希望文中的讲解能够起到抛砖引玉的效果,对广大读者在SQL Server性能优化方面有启发作用。

摘要:总结了实际工作过程中遇到的SQL Server性能优化方面的问题。精选4个有代表性的案例,每一个案例均按照案例背景、案例分析过程、案例小结的步骤,从实践的角度讲述了SQL Server性能优化分析的全过程。

关键词:SQL Server,性能优化,案例分析

参考文献

[1](美)brian knight,ketan patel,wayne snyder,等,著.SQLServer2005高级管理人民邮电出版社,2008.

[2](美)Steve Adrien Deluca,著.Microsoft SQL Server7性能优.化机械工业出版社,2000.

上一篇:劳动派遣合同范本下一篇:集装箱码头公司防汛应急预案