性能调整指南

上传人:无*** 文档编号:162625014 上传时间:2022-10-19 格式:DOC 页数:51 大小:304.50KB
收藏 版权申诉 举报 下载
性能调整指南_第1页
第1页 / 共51页
性能调整指南_第2页
第2页 / 共51页
性能调整指南_第3页
第3页 / 共51页
资源描述:

《性能调整指南》由会员分享,可在线阅读,更多相关《性能调整指南(51页珍藏版)》请在装配图网上搜索。

1、Microsoft SQL Server 7.0 性能调整指南本文档中包含的信息代表了微软公司在出版时对所讨论问题的观点。由于正在进行的开发工作的本身特性,且因为微软公司必须对正在变化的市场情况作出反应,它不应当认为是微软公司的承诺,并且微软公司不对出版后的任何信息的准确性作任何担保。本文档仅用于资料用途。微软公司在本文档中,未作任何明示或暗示的担保。1998 微软公司。保留所有权利。Microsoft, ActiveX, BackOffice, the BackOffice logo, Fox Pro, PivotTable, Visual Basic和 Windows NT是微软公司在美国

2、和/或其他国家的注册商标或商标。这里提到的其他产品和公司名称可能是其各自所有者的商标。微软公司产品编号: 098-80705目录观众1介绍2Microsoft SQL Server 6.x版到 7.0版的性能调整比较2SQL Server 性能调整原则4评价配置期间的max async IO 选项6消耗CPU 和磁盘 I/O 资源的组件7工作线程7懒书写器(lazy Writer)7检查点8日志管理器9预读管理器9磁盘I/O 性能11磁盘传输率及SQL Server中的磁盘传输率11顺序与非顺序磁盘I/O操作12磁盘I/O 传输率和 PCI总线带宽12RAID13硬件RAID控制器自带高速缓存

3、的影响14RAID 级别14普通RAID 等级15联机RAID扩充15性能监控器和RAID16Windows NT 软件方式RAID16并行磁盘 I/O17SQL Server 索引20簇索引21非簇索引21覆盖索引22自动的覆盖索引或覆盖查询22索引选择23簇索引选择24簇索引选择方案24FILLFACTOR 和 PAD_INDEX25SQL Server性能调整工具28样本数据和工作负载28SQL Server配置文件28使用带有索引调整向导(Index Tuning Wizard)的SQL Server配置文件28分析SQL Server配置文件信息30SQL Server查询分析器31

4、I/O次数统计31ShowPlan31Showplan输出示例32性能监控器(Performance Monitor):37关键的性能监控器功能39(物理或逻辑的)磁盘队列 239系统: 处理器队列长度 2 (每个 CPU)39硬分页 - Memory: Pages/Sec 0 或者 Memory: Page Reads/Sec 540软分页- Memory: Pages Faults/Sec 041监控处理程序41磁盘IO次数计数器42性能监控器图形输出43其他影响性能的因素44缓解网络交通和资源耗费44死锁44查询中要避免的语句44灵活的规范化45分割视图45复制和备份性能45EMC磁盘I

5、/O调节方案46查找更多的信息48观众这份性能调整指南提供了一系列的信息,来帮助数据库管理员进行配置,以使Microsoft SQL Server达到最优性能,并帮助他们搞清楚在SQL Server 环境下造成性能损失的原因。本文档同时还提供了如何使用SQL Server 索引,如何使用SQL Server 工具,这些工具帮助分析SQL Server查询的 I/O执行效率。介绍熟悉Microsoft SQL Server早期版本的数据库管理员可以从下面这张表中对SQL Server 7.0的性能有个大致的了解。Microsoft SQL Server 6.x版到 7.0版的性能调整比较SQL

6、6.x 需要考虑的事项SQL Server 7.0 相应的改进在性能调整时需要考虑许多配置选项。在Microsoft SQL Server 7.0版本中数据库机制实现了自配置、自调整、自管理。 懒书写器(Lazy writer)与预读管理器(Read Ahead Manager)也实现了自调整。max async IO 选项是唯一的sp_configure选项,仅在初始化时、或者当工作于拥有巨大存储的服务器时使用这一选项。这种在调整要求上的简化处理为数据库管理员节省了大量的时间,用节省下来的时间可以去完成其它任务。熟悉早期版本SQL Server的读者会注意到:数据库管理员不再需要配置过多的s

7、p_configure 选项就可以得到较好的SQL Server 性能。尽管数据库管理员仍然可以手工配置和调整许多SQL Server早期版本的sp_configure 选项,我们还是建议他们使用SQL Server提供的所有缺省sp_configure选项进行自动配置和调整。这样使SQL Server可以根据服务器的变化自动调整数据库服务器的配置,例如运行于数据库服务器的SQL Server和其它应用程序的RAM和CPU利用率。有时需要手工调整懒书写器(lazy writer)与Microsoft SQL Server的早期版本不同, Microsoft SQL Server 7.0可以自动

8、地配置和调整懒书写器(lazy writer)。你不再需要手工调整free buffer 参数与max lazywrite IO参数。使用SQL Server 7.0性能监控对象仍然可以监控空闲缓冲区和懒书写器(lazy writer )I/O 的活动。有时需要手工调整检查点。Microsoft SQL Server的早期版本中,还使用recovery interval 选项来调整检查点过程。当recovery interval 选项被置为缺省值0时, Microsoft SQL Server 7.0 自动地监控和调整恢复时间间隔。只要在系统中没有超长运行时间的事务处理,缺省配置会为所有数据库

9、把恢复时间间隔保持在一分钟之内。若想获取更多的资料,请参阅SQL Server 7.0 联机帮助中的相关主题和/或关键字:检查点、日志活动部分与定期故障恢复。SQL Server 6.x 日志与数据页共享RAM 高速缓存。有时需要手工调整日志管理器。Microsoft SQL Server 7.0版明显改变了 SQL Server的日志管理。SQL Server 7.0 日志管理器管理它自己的日志高速缓存。SQL Server 不再象早期版本那样依赖syslogs 表。将日志文件管理从数据高速缓存管理中分离出来的做法,使这两部分的性能都得以提高。SQL Server 日志管理器同时还能执行磁盘

10、I/O,其基本数据块的大小要大于早期版本的数据块。增大的 I/O 数据块的大小和I/O的序列化帮助提高其日志性能。SQL Server 7.0 将自动调整SQL Server 日志管理器的性能。不再需要手工调整sp_configure 的 logwrite sleep 选项,因为SQL Server 7.0已经根本不再提供这一选项。若想获取更多资料,请在SQL Server 7.0联机帮助中用关键字logwrite sleep查询。对数据库服务器操作来说,分割页的开销颇大。Microsoft SQL Server的早期版本中, 因为在分割页时需要重新计算索引页的行数,因此需要大大调整B树索引页

11、(当插入行填满了数据页或索引页时,会发生分割页的情况)。SQL Server 7.0对存储结构的改变使这个问题最小化。非簇索引页(Nonclustered index pages)为没有簇索引的表(这样的表称之为堆)采用固定RID(行ID-Row ID),有簇索引的表采用簇关键字。这样使插入操作和分割页操作时对B树的维护工作大大减少了。总体影响是索引的维护速度加快,这意味着在不影响数据修改性能的情况下,可以建立更多的非簇索引。若想获取更多资料,请查阅SQL Server 7.0 联机帮助的相关主题及/或关键字:改善的结构、表结构及索引结构、分割页SQL 跟踪(SQL Trace)Microso

12、ft SQL Server 7.0 提供了SQL Server 剖视器(Profiler),它代替了SQL Server 6.5中的SQL跟踪( Trace) 工具。SQL Server 剖视器 提供了相似的、但明显改善了的功能。ISQL/W在 SQL Server 7.0中, SQL Server 查询分析器(Query Analyzer)代替了SQL Server早期版本的 ISQL/W 。设备及分段Microsoft SQL Server 7.0 引入文件和文件组 (files and filegroups),以此来代替早期版本的设备模型和段模型。 这些文件和文件组为数据在磁盘和磁盘阵列

13、的合理分布提供了一种更便利的方法。若想获取更多资料,请查阅SQL Server 7.0 联机帮助的相关主题:为文件组加索引,为文件组、文件及文件组设置表,使用文件及文件组管理数据库变化。SQL Server 性能调整原则Microsoft SQL Server 7.0 引进和改善了一些调整SQL Server性能以达到最优性能的方法和工具。当你调整你的SQL Server 时,请遵循以下原则: 让 SQL Server完成大部分的调整工作。Microsoft SQL Server可以创建一个自动配置及自动调整的数据库服务器。充分利用SQL Server提供的自动调整设置功能。这些设置帮助SQL

14、 Server 保持以最佳性能运行,甚至在用户装入内容不断变化或者查询内容不断变化的情况下也能保持。 RAM 是有限的资源。对RAM高速缓存的管理是数据库服务器环境的一个整体特征。从RAM 高速缓存中存取数据比从磁盘中存取数据的速度要快得多,但是RAM是一种有限的资源。如果数据页与索引页对数据I/O的要求可以降低到最低限度,那么这些页也就可以在RAM中保存的时间更长一些。过多的不必要的数据信息和索引信息涌入高速缓存会把有用页过快地挤出去。调整性能的重点就是减少I/O,以使高速缓存的利用率达到最高。 挑选好的索引。为所有数据库查询保持最小I/O的一个关键性措施是:保证建立和维护适当的索引。 评价

15、磁盘 I/O 子系统性能。物理磁盘子系统必须提供一个带有足够I/O处理功能的数据库服务器,可以在不做磁盘查询操作的情况下直接运行它。过多的磁盘查询操作会导致性能的降低。这篇文档描述了如何检测以及如何解决磁盘I/O的问题。 调整应用程序和查询程序当数据库服务器处理由特定应用程序指定的、来自成百上千个连接点的服务请求时,调整应用程序和查询程序变得非常重要。因为在典型情况下,是应用程序确定运行于数据库服务器上的SQL查询,所以应用程序开发者必须懂得SQL服务器的基本框架,以及如何充分利用SQL Server索引来使I/O最小化。 充分利用SQL Server剖视器(Profiler)及索引调整向导(

16、Index Tuning Wizard)SQL Server 剖视器(Profiler)可以用来监测SQL Server 的工作量,并为其做日志文件,然后可以将其递交给索引调整向导(Index Tuning Wizard) ,为实现更好的性能而对索引重新进行调整。经常使用SQL Server 剖视器和索引调整向导可以帮助你优化索引,使SQL Server在查询工作改变的情况下仍能以较好的性能工作。 利用SQL Server 性能监视器(Performance Monitor)。SQL Server 7.0提供了一套修改过的性能监视器对象和计数器,它们可以用来为监视和分析SQL Server操作

17、提供有用的信息。这篇文档描述了性能监控器中一些重要的计数器。 利用图形化显示方案(Graphical Showplan)和SQL Server查询分析器(Query Analyzer)SQL Server 7.0 查询分析器引入了图形化显示方案,帮助分析在Transact-SQL 查询时出现的问题。SQL Server 查询分析器还包含STATISTICS IO ,这是调整查询功能的另一个重要的工具选项。评价配置期间的max async IO 选项在Microsoft SQL Server 7.0的初始化配置期间,如果需要的话,应对 max async IO 选项进行评价和调整。max asy

18、nc IO 选项的缺省值是32,这对低级磁盘子系统来说已经足够。但如果数据库服务器使用提供高速磁盘I/O传输的高级磁盘子系统RAID,设置为32可能就不够了,因为RAID 子系统可以完成的磁盘同步传输请求数目远不止32个。如果SQL Server 写操作也要求更高的磁盘传输能力,那么max async IO 选项的值应该设置的更高一些。 max async IO选项应当满足合适的值:在要求下一个检查点(基于期望恢复的性质)之前,本检查点应该完成监测任务。而不是将这个选项值设置得过大,以至于使系统被监测事件严重堵塞(磁盘排队是堵塞的一个特征,在本文的后续部分将做深入的讨论)。 为运行在大磁盘子系

19、统上的SQL Servers设置 max async IO 选项的一般性规则是:将可用来同步的物理磁盘数乘以2或3。然后观察性能监控器的磁盘活动标记和查询结果。将此配置选项值设置得过高可能会造成这样的不良后果:检查点操作独占其它SQL Server I/O 操作(比如读操作)所要求的磁盘子系统带宽。要设置 max async IO 选项值,可以执行SQL Server 查询分析器(Query Analyzer)中的这个命令:sp_configure max async io, value, value 表示可以同时提交的磁盘I/O请求的数目,这些I/O请求指的是SQL Server 系统在检查

20、点操作时可以提交到Windows操作系统的请求,检查点操作按顺序把这些请求提交到物理磁盘子系统。若想获取更多资料,请参阅本文档后面将提到的“磁盘I/O性能调整”。这个配置选项是动态的,改变它的值可以立即有效,而不需要先关掉SQL Server然后再重新启动。 若想获取更多信息,请查阅SQL Server 7.0联机帮助:I/O结构和max async io 选项。消耗CPU 和磁盘 I/O 资源的组件仔细分析消耗系统资源的Microsoft SQL Server组件,可以进一步优化SQL Server的性能。 工作线程Microsoft SQL Server调整Windows操作系统线程池,来

21、处理提交到数据库服务器的SQL Server 批处理命令。这些可以提供所有批处理命令服务的全体线程(称为工作线程)是通过设置sp_configure 的max worker threads选项来描述的。如果提交的活动批处理命令数目大于max worker threads指定的数目,工作线程将被动态提交的批处理命令连接(connections actively submitting batches)共享。缺省设置255在大多数安装情况下工作得很好。 工作线程从SQL Server高速缓存中清除大多数不洁净的8-KB页面。工作线程异步调度I/O操作,以达到最佳性能。 若想获取更多资料,请参考SQL

22、 Server 7.0联机帮助中的以下主题和/或关键字:使用内存配置选项(Memory Configuration Options)、SQL Server存储池(Memory Pool)、事务处理恢复(Transaction Recovery)、写优先处理日志(Write-Ahead Transaction Log)、清空缓存页面、写缓存页面(Freeing and Writing Buffer Pages)、SQL Server线程,来优化服务器性能。 懒书写器(lazy Writer)SQL Server 懒书写器帮助产生空缓冲区,也就是一个不包含任何数据的8-KB 高速缓存页面。每当懒书

23、写器把一个8-KB 的缓冲区的内容存到磁盘时,它都会初始化该缓冲页标识,以使其它数据可以写进该空缓冲区。懒书写器在磁盘I/O请求较少的时候产生空缓冲区,为以后使用磁盘I/O资源作好准备,而且对其它SQL Server 操作产生的影响最小。 SQL Server 7.0 自动配置和管理空缓冲区的数目。监测SQL Server: Buffer Manager - Free Buffers 对象,保证空缓冲区的数目保持稳定。懒书写器调整缓冲区的数目,使其满足用户对空缓冲区的要求。SQL Server: Buffer Manager - Free Buffers 对象应该不会降低到0,因为如果这样的话

24、, SQL Server懒书写器将总不能满足用户提出的空闲缓冲区要求。 如果懒书写器不能保持空闲缓冲区资源的稳定,或者说不能始终保证可以提供空闲缓冲区,这将意味着磁盘子系统的懒书写器不能始终提供磁盘I/O功能,那么需要调整空闲缓冲区的数目(把这种空闲缓冲区数目减少的现象与任何其它确认是由磁盘子系统问题引起的磁盘排队现象相比较)。解决磁盘排队问题的一种方法是为数据库服务器磁盘子系统增加更多的物理磁盘(也称做spindles ),为其提供更强的I/O处理能力。SQL Server: Buffer Manager Lazy Writes/sec 对象表示的是懒书写器写到磁盘的8-KB 页面数。 在性

25、能监控器中监控当前磁盘队列的长度,这是通过查看平均磁盘队列(Disk: Average Disk Queue )或 当前磁盘队列(Current Disk Queue) 计数器的值(物理的或逻辑的)得到的,以保证每一个与任何SQL Server动作相联系的物理磁盘的队列长度都在小于2。对于配置有硬件RAID 控制器和磁盘阵列的数据库服务器,应该将磁盘计数器报告的数目(逻辑的或物理的)除以实际硬盘数目(这里的硬盘数目可以从逻辑驱动器盘符得到,或者从Windows NT 磁盘管理器程序提供的物理硬盘数得到)。因为Windows 与 SQL Server根本不考虑连到RAID控制器的实际物理硬盘数目

26、。而你却应当知道与RAID磁盘阵列控制器相连的驱动器数目,因为这样才能明白性能监测器报告中的磁盘排队。 使用max async IO 选项调整懒书写器磁盘I/O请求,它控制8-KB 的磁盘写请求(包括来自懒书写器、检查点、工作线程的请求)数目,这些写请求指的是SQL Server可以同时向Windows 操作系统及依次向磁盘I/O子系统提交的请求。如果磁盘排队的队列长度达到不可接收的地步,则减小max async IO 选项的值。如果一定要保持当前配置的max async IO 选项值,则应向磁盘子系统添加更多的磁盘,直到磁盘队列的长度可以接受为止 。若想获取更多资料,请参考SQL Serve

27、r 7.0 联机帮助中的以下主题:清空缓冲区页、写缓冲区页、写优先事务处理日志。检查点检查点(Checkpoint)操作将不洁净页写到SQL Server 数据文件中。不洁净页指的是在高速缓存中被修改的页。这些页被写到磁盘后,并没有从缓冲区中清除, 因此用户仍然可以在高速缓存中直接读取或者修改这些页面,而不需要从磁盘中重新读出来,这与懒书写器创建空闲缓冲区的方法不同。 检查点操作让工作线程和懒书写器做大部分清空不洁净页的工作。它会保持等待,一直等到一个特别的检查点,才清空不洁净页。这样为工作线程和懒书写器提供了更多的清空不洁净页的时间。SQL Server文档中对这种额外等待时间的发生条件有详

28、细描述。检查点操作通过额外的检查点等待时间使 SQL Server 磁盘I/O 活动在较长时间段内达到均衡。当有许多页涌入到高速缓存时,为使检查点工作更加有效,SQL Server将数据页按磁盘上的顺序排序。这种排序将尽量使磁盘臂移动距离最小,尽量允许检查点操作利用顺序磁盘I/O的优势。检查点操作也可以直接向磁盘子系统提交异步8-KB字节的磁盘I/O操作的请求。这样做可以使SQL Server更快地完成所需磁盘I/O请求的提交,因为检查点操作不需要等待磁盘子系统做出数据实际已经写到磁盘的报告。 你应当观察与SQL Server数据文件相关的硬盘驱动器的排队情况,注意观察SQL Server 是

29、否发送了超出磁盘处理能力的过多磁盘I/O请求。如果是,那么应当增大磁盘I/O的容量,提高磁盘子系统处理负载的能力。使用max async IO 选项可以改善检查点操作时过量不洁净页涌入的情况。sp_configure 的 max async IO 选项控制特定8-KB 高速缓存的数目,这些高速缓存指的是检查点操作可以同时向Windows 操作系统以及依次向磁盘I/O子系统提交的缓存。如果磁盘队列的长度长到不可接受,那么减小max async IO 选项的值。如果 SQL Server必须维持max async IO 选项的当前值,那么为磁盘子系统增加磁盘数目,直到磁盘队列的长度缩短到可以接受的

30、水平。如果你必须提高SQL Server 执行检查点操作的速度,并且磁盘子系统有足够的能力可以在不引起磁盘排队等待就能处理增加的磁盘I/O操作,那么可以增大max async IO 选项的值,以允许SQL Server 提出更多的异步磁盘I/O请求。在你改变max async IO 选项值之后,请认真观察磁盘排队计数器。除了观察磁盘写队列,还要观察磁盘读队列。如果max async IO 选项对磁盘子系统来说设置得过高,检查点操作可能会引起磁盘写I/O请求排队,这也将导致SQL Server 读操作的堵塞。性能监控器中的物理磁盘对象和逻辑磁盘对象提供了“平均磁盘读队列长度”(Average D

31、isk Read Queue Length )计数器,它可以用来监测磁盘读I/O请求的排队情况。如果磁盘读队列是由检查点操作引起的,你可以减小max async IO 选项的值,或者增加硬盘驱动器数目,以便同时处理检查点操作和读请求。日志管理器象其它重要的关系数据库管理系统(RDBMS)产品一样, SQL Server同样也保证所有在数据库上执行的写操作(插入、修改、删除)在遇到异常中断情况时(例如:电源掉电、磁盘损坏、数据中心失火等等),数据不会丢失。 SQL Server 的日志处理可以保证恢复数据。在任何隐含的(单独的SQL 查询)或者显式的(发出BEGIN TRANSACTION, C

32、OMMIT 或 ROLLBACK 命令的事务处理)事务处理完成之前, SQL Server 日志管理器一定要从磁盘子系统接收一个信号,表明所有与事务处理相联系的修改数据都成功地写到了相关的日志文件中。这一规则保证了当服务器遭遇突然停机,高速缓存上的内容还没有来得及写到数据文件中去,然后在重新开机时,可以通过读取事务处理日志来恢复数据文件。填充数据缓存是检查点操作或懒书写器的工作。服务器中断后读事务日志文件、进行SQL Server事务处理的过程称之为恢复(recovery)。因为当每个事务处理完成时, SQL Server必须等待磁盘子系统完成对SQL Server 日志文件的I/O操作,因此

33、包含SQL Server日志文件的磁盘必须有足够的磁盘I/O处理能力来处理期望的事务负载。监测磁盘排队的方法对SQL Server 日志文件和对SQL Server数据库文件的处理不同。你可以使用性能监控器的计数器SQL Server: Databases database instance : Log Flush Waits Times 以及 SQL Server: Databases database instance : Log Flush Waits/sec ,来查看在磁盘子系统上等待完成的日志书写器请求。 为获取最高性能,如果高速缓存控制器可以保证它里面的数据最终都将写到磁盘上,甚至

34、在电源掉电的情况下也能保证,那么你可以为SQL Server日志文件使用高速缓存控制器。若想获取有关高速缓存控制器的更多资料,请参阅将在本文档后面部分讨论的“硬件RAID控制器内嵌高速缓存的影响(Effect of On-Board Cache of Hardware RAID Controllers)”。若想获取更多资料,请参考SQL Server 7.0 联机帮助中的以下主题和/或关键字:事务处理恢复,优化事务日志性能,日志管理器对象。预读管理器Microsoft SQL Server 7.0 预读管理器是完全自配置与自调整的。预读管理器与SQL Server 查询处理器紧密结合。SQL

35、Server查询处理器(Query Processor )会识别那些适合预读操作的情况。对较大表的扫描、大范围索引的扫描、查看B树中的簇索引与非簇索引,这些情形都适合预读操作。预读操作每次读64-KB I/O,相对于8-KB I/O而言,为磁盘子系统提供了更高的磁盘流量。当需要从SQL Server 检索大量数据时,预读操作是最佳的方案。预读管理器得益于使用更加简单、更加高效的索引分配表(Index Allocation Map IAM)存储结构。IAM 是SQL Server 7.0的新方法,用来记录范围(8页SQL Server数据信息或者索引信息,最大长度是64 KB)的位置。IAM 是

36、一个8-KB 的页面,使用位图这样的紧缩格式表示索引数据。紧缩格式的 IAM 页面的存取速度很快,常用的IAM 页面保存在高速缓存中。 预读管理器可以结合来自查询处理器的联合查询信息,创建多个读请求序列,并且快速地检索所有范围的位置,这要从IAM 页面中读取。序列化的 64-KB磁盘读操作提供了极好的磁盘I/O性能。 预读动作由SQL Server: Buffer Manager - Readahead Pages 计数器监测。执行DBCC PERFMON (IOSTATS)命令,你可以得到有关预读活动的更多信息。其中一部分提供了RA Pages Found in Cache 和 RA Pag

37、es Placed in Cache。如果页面已经被哈希处理(应用程序先读到它,预读操作浪费一次读操作),那么它就是在高速缓存中找到的页面。如果页面没有被哈希处理(顺利的完成预读),那么它是放在高速缓存中的页面。过多的预读操作会影响整体性能,因为它会在高速缓存中放入一些不必要的页面,要求额外的I/O与CPU资源,而这些资源本可以用在其它地方。对这个问题的解决是性能转换的目的,所有的Transact-SQL 查询都将被转换,以使高速缓存中的页面数达到最少。这包括对合适的任务使用合适的索引。为有效的范围扫描保存簇索引、定义非簇状索引,以此来协助快速定位单独行,或者少数的若干行。若想获取更多资料,请

38、参考SQL Server 7.0联机帮助中的以下主题和/或关键字:读页面、表和索引结构,堆结构, DBCC PERFMON,预读页。磁盘I/O 性能当你配置一个只包含几兆字节数据的SQL Server,而且此SQL Server不需要处理大量的读操作和写操作时,你不用过多地考虑磁盘I/O,也不用考虑使用多个硬盘来平衡SQL Server I/O的活动以达到最佳性能。但是,当你创建较大的SQL Server 数据库,比如说包含数百兆字节的数据,并且/或者需要处理大量的读和/或写操作时,你必须通过使用多个硬盘来平衡SQL Server I/O的活动,以配置SQL Server 使其磁盘I/O性能达

39、到最佳。磁盘传输率及SQL Server中的磁盘传输率数据库性能提高的一个重要表现是I/O性能的提高。除非SQL Server 运行在一个拥有足够大以至于可以保存全部数据库的计算机上,I/O性能是由磁盘I/O子系统读写处理SQL Server数据的速度来表示的。 典型的硬盘驱动器可以向Windows 操作系统和SQL Server提供大约每秒75次非顺序(随机)操作,以及每秒150次 顺序I/O操作。这些硬盘驱动器的传输速率大约是每秒40MB。数据库服务器的I/O传输速率很可能限制在每秒75/150次,而不是每秒40MB。得到以下的计算: (每秒75次随机I/O 操作) X (8-KB 的数据

40、传输) = 每秒600 KB这一计算表明如果在一个硬盘驱动器上做严格的单独页面读写操作,你只会得到不超过每秒600 KB 的I/O处理能力。这远远低于所宣布的每秒40 MB的硬盘处理速度。SQL Server工作线程、检查点、及懒书写器都是用8-KB的传输块来执行I/O操作的。(每秒150次顺序 I/O操作) X (8-KB 的数据传输) = 每秒1200 KB这一计算标明如果在一个硬盘驱动器上做严格的顺序单独页面读写操作,你会得到不超过每秒1200 KB (1.2 MB)的处理能力。 (每秒75次随机I/O操作) X (64-KB的数据传输) = 每秒4800 KB (4.8 MB)这一计算

41、为假定全部都是随机I/O情况的预读显示了一种更坏的情形。然而即使在完全随机I/O的情况下, 64-KB的传输块大小也为磁盘提供了更好的磁盘I/O传输率(每秒4.8 MB),而不是单独页面(8-KB)传输率(每秒0.6 MB和1.2 MB)。(每秒150次顺序I/O操作) X (64-KB 的数据传输) = 每秒9600 KB (9.6 MB) 这一计算表明如果在一个硬盘上做严格的顺序读写操作,你会得到不超过每秒9.6 MB 的处理能力。这比随机I/O情况要好得多。SQL Server 预读管理器以64-KB的传输率执行磁盘I/O,安排读操作,因此预读(通常称为顺序化或按磁盘顺序)的扫描是顺序执

42、行的。尽管预读管理器顺序化执行I/O 操作,页分离仍使得读操作非顺序化。这是需要尽量消除和防止页分离的一个原因。日志管理器按顺序填写日志文件,使之最大达到32 KB。顺序与非顺序磁盘I/O操作术语顺序与非顺序(随机)用来针对于硬盘驱动器的操作。一个单独的硬盘驱动器由一组盘片组成,每一个盘片都通过一套读写头提供读写操作的服务,读写头可以在盘片上移动,从盘片上读数据,或者向盘片写数据。记住有关硬盘驱动器和SQL Server 的以下几点: 读/写头和与之相连的磁盘臂必须能移动,以定位到与SQL Server 和 Windows操作系统要求内容相对应的盘片位置,并且进行相应的操作。如果数据在硬盘盘片

43、上以随机方式存储,那么硬盘移动磁盘臂和读写头一定会花费更多的时间定位到所有要求的硬盘盘片的相应位置。而顺序存储的情形与此相反,所有要求的数据存放在硬盘盘片的一个物理上连续的位置,这样磁盘臂和读写头可以移动最小距离来执行必要的I/O磁盘操作。随机存储与顺序存储在时间上的差别是显而易见的,随机存储大约只能达到50ms,而顺序存储大约能达到2-3 ms。这些时间只是粗略的估计,对随机存储而言,存储时间还随着随机存储数据的分布、硬盘盘片转速(RPM)、其它硬盘的物理特征的变化而变化。重要的一点是顺序I/O操作对提高SQL Server 性能很有好处。 典型的硬盘驱动器支持大约每秒75次随机I/O操作以

44、及每秒 150次顺序I/O操作。读写8 KB字节所用的时间与读写64 KB字节所用的时间大致相同。在 8 KB到 64 KB的范围内,磁盘臂和读写头移动的时间主要是一次单独的磁盘I/O传输操作。当多于64KB的SQL数据需要传输时,尽量执行64-KB 字节的数据传输,因为64-KB 字节传输时间与8-KB字节的传输时间相同,这样每次传输可得到8倍于8-KB字节的传输量。预读管理器用64-KB的数据块处理磁盘操作(称为SQL Server范围)。日志管理器也用大尺寸的I/O块执行顺序写操作。通过更好的利用预读管理器,以及从随机存取文件中分离SQL Server日志文件,你可以提高SQL Serv

45、er的性能。 若想获取关于物理硬盘驱动器的更多资料,请参阅Compaq 的文献:“磁盘子系统性能及其可变性”。参考本文档后面的“查阅更多资料”部分,将告诉你如何得到此文献。磁盘I/O 传输率和 PCI总线带宽一个典型的硬盘提供了大约每秒40MB或者每秒75次随机存储/150次顺序存储的最大传输率。所宣称的典型的 RAID控制器大约有每秒40MB或每秒2000次的传输率。所宣称的PCI总线有大约每秒133MB或更高的数据传输率。设备实际获得的传输率与所宣称的通常会有一定的差别。你应当懂得如何通过这些传输率来决定与每个RAID控制器相连的硬盘设备的数目,以及在不造成I/O瓶颈的情况下,可以有多少个

46、磁盘驱动器和RAID控制器与PCI总线相连。 我们在前面已经计算得到读写到一个硬盘驱动器的SQL Server 数据的最大速率是每秒9.6 MB。假设RAID控制器可以处理每秒40MB,你可以用40除以9.6大约得到4,便是连接到RAID控制器的硬盘驱动器的数目。这意味着当SQL Server 只是做64KB字节的顺序I/O操作时,与一个RAID控制器连接的硬盘驱动器的最大数目是4。类似的,我们计算64KB随机I/O的情况,从硬盘驱动器到控制器的最大数据传输率是每秒4.8MB。40MB除以每秒4.8MB,得到的结果是8。这意味着在随机64-KB I/O情况下,与一个控制器相连的硬盘驱动器的最大

47、数目是8。随机8-KB I/O情况下 数据传输要求的驱动器数目最多。40除以0.6得到结果66,RAID控制器连接66个硬盘驱动器可以使8-KB 字节的读写达到饱和。当然这种情形是不现实的,因为预读和写日志使用大于8-KB字节的传输尺寸,而且SQL Server 也不可能完全执行随机I/O操作。 你还可以通过查看磁盘每秒的操作次数,而不是每秒多少兆字节,来决定与RAID控制器相连的驱动器数目。如果硬盘驱动器可以有每秒75次的非顺序(随机)I/O操作,那么26个硬盘驱动器一起工作原则上将产生每秒2000次的非顺序I/O操作,或者说足够达到单个RAID控制器的最大处理能力。 同样,因为单个硬盘驱动

48、器可以处理每秒150次的顺序I/O操作,那么将需要13个硬盘驱动器一起工作以达到每秒2000次的顺序I/O操作。RAID控制器和PCI总线 不象硬盘驱动器那样容易产生瓶颈现象。为说明这个问题,假设有一组与RAID控制器相连的硬盘设备足够忙,达到每秒40MB的数据流量通过RAID控制器。下面要考虑的是最多可以有多少个RAID控制器可以与PCI总线相连,而不至于引起PCI总线瓶颈的危险。为得到一个大致的的估计,用PCI总线的I/O处理能力除以RAID控制器的I/O处理能力: 133 MB/s 除以 40 MB/s,得到结果:一个PCI总线大约可以连接3个RAID控制器。大多数的大服务器带有一条以上

49、的PCI总线,这将增加可以安装在单个服务器上的RAID控制器的数目。这些计算表明包括磁盘I/O子系统(硬盘驱动器、RAID控制器、PCI总线)的组件传输速率的关系。这些计算假设所有的数据或者全部是顺序存取,或者全部是非顺序存取,而这在实际数据库服务器环境中是不可能的。现实中,顺序的、非顺序的存取并存,8-KB 和 64-KB 字节的I/O操作同时发生。还有其它一些因素影响可以同时在一组硬盘上执行的I/O操作的数目。主板上的读写缓存使RAID控制器增加了一套硬盘,可以有效提供的I/O操作数目。具体的数目难以估计,因为难以估计SQL Server 环境需要的确切的8-KB字节 和64-KB字节 I

50、/O数目。 RAID当数据库的容量大于几兆字节时,就很有必要对RAID (廉价磁盘冗余阵列)技术、以及它与数据库性能的关系做一个基本的了解。以下是使用RAID的一些好处: 高性能硬件 RAID 控制器将Windows 和诸如Microsoft SQL Server这样的应用程序中所有数据的读/写分成若干块(一般情况下大小是16 KB - 128 KB ),这些块分布在RAID磁盘阵列的所有磁盘上。将数据分成小块分布在不同物理磁盘上,这种做法使RAID磁盘阵列中硬盘的I/O读写操作比较均匀。这样做提高了磁盘I/O的性能,因为RAID磁盘阵列中的所有硬盘保持同样的忙程度,而不象在某些不均匀I/O请

51、求情况下,容易造成某些磁盘瓶颈现象的发生。 容错性RAID 提供了对硬盘提供错误保护和数据恢复,使用两种方法:镜像和奇偶校验。镜像是通过向两个驱动器写信息,一个作为另一个的镜像来实现的。如果镜像驱动器中的其中一个驱动器中的数据丢失,丢失的数据可以从相应匹配的驱动器中得到。在Windows 和 SQL Server不脱机状态下(称为具有“热插拔(Hot Plug) ”)功能的驱动器),大多数RAID控制器可以替换一个发生错误的驱动器,从相应的镜像驱动器中为其恢复数据。当要求具有容错性时,镜像是RAID最佳的解决方案。镜像情况下,每个SQL Server写操作实际上都要 进行两次写操作,分别写到镜

52、像对的两边。镜像提供的容错性超过RAID的奇偶检验的容错性。镜像功能可以使服务器在一个磁盘发生错误的情况下仍能继续工作,并且镜像磁盘中若有一半的磁盘发生错误,它仍可以使系统管理员在不关掉服务器的情况下,从文件备份中恢复发生错误的磁盘。镜像的缺点是开销过大。镜像对磁盘的开销要求是:要求两组磁盘都保存有全部数据。RAID 1和它的衍生体RAID 0+1,都是通过镜像功能实现的。奇偶校验是通过计算写在磁盘上的恢复信息来实现的,这个恢复信息保留在组成磁盘阵列的一个专门磁盘上,与该磁盘阵列中其它磁盘上的信息共同满足奇偶校验。如果一个磁盘发生了错误,则在RAID磁盘阵列中换入一个新盘,用恢复信息(满足奇偶

53、校验)将坏盘的内容恢复到新盘上。RAID 5 和它的衍生体都是通过奇偶校验来实现的。奇偶校验的优点是开销较低。使用RAID 5,只需要一个额外的磁盘就可以保护任意数目的磁盘。校验信息均匀分布于组成RAID 5的所有磁盘上。奇偶校验的缺点是性能不高以及容错性不高。因为做校验需要额外的计算开销和写开销,RAID 5对每个Windows NT 和 SQL Server的写操作都要求四次磁盘I/O操作,而镜像则只需要两次。I/O读操作的开销与镜像相同。同样的,RAID 5也仅能在一个磁盘发生错误的情况下维持工作,而从备份磁盘中恢复数据的工作则需要脱机进行。 通常的规则是将数据分块使其分布在尽量多的磁盘

54、上,以获取稳定的磁盘I/O性能。性能监控器将显示在特定的RAID磁盘阵列中是否有磁盘I/O瓶颈。请作好添加磁盘以及为RAID磁盘阵列和/或SCSI通道重新分配数据的准备,以备平衡磁盘I/O及达到最佳性能之用。硬件RAID控制器自带高速缓存的影响许多硬件 RAID控制器有多种读与/或写高速缓存方式。充分利用这种高速缓存能力,可以提高磁盘子系统的有效I/O处理能力 。这些基于控制器的缓存机制的原理是集合较小的、非顺序的I/O请求,这样传到硬盘的批量I/O请求可以组成较大的(32 - 128 KB)、而且有可能是顺序的I/O请求。这样有助于:在硬盘到RAID控制器的I/O数目一定的情况下,可以达到更

55、大的数据流量。RAID 控制器缓存正是极好地利用了硬盘的I/O处理能力,来安排I/O请求的。RAID 控制器通常依靠它们的备份功能来保护它们的缓存机制。备份功能指的是在电源掉电的情况下,可以在一段时间内将写在高速缓存中的数据保存下来。在实际工作环境中,如果服务器掉电,备份功能将向服务器提供足够的UPS保护,从而提供给数据库服务器更多的保护,将数据库服务器上的数据存到磁盘上。RAID 级别在所有的RAID级别中,RAID 1 和 RAID 0+1 提供最佳数据保护和最佳性能,但是它要求较多的磁盘开销。当不需要过多地考虑硬盘价格问题时, RAID 1或 RAID 0+1 是同时满足高效性和高容错性

56、的最佳选择。RAID 5 在花费最小的情况下提供了容错功能,但是它的磁盘写效率只有RAID 1和 RAID 0+1的一半,因为RAID 5在处理校验信息时,需要额外的磁盘写操作。RAID 5 的容错性不及RAID 1 和RAID 0+1。使用RAID 0 (没有容错性保护的磁盘划分)可以获得最佳效率。但是因为它没有容错性保护,这种 级别的RAID只用在数据库开发环境或者某些测试环境中。当拥有多个物理硬盘驱动器时,许多 RAID 磁盘阵列控制器都提供RAID 0+1 (也写做 RAID 1/0或者 RAID 10) 选项。RAID 0+1 是一种衍生出来的 RAID 方案。它的低级形式是象普通R

57、AID 1一样镜像所有的数据;高级形式则是控制器将数据分块分布在所有的驱动器上(象RAID 0)。这样, RAID 0+1 在实现高效性(数据分块)的同时,又提供了最大限度的保护(镜像)。这些镜像和分块操作对Windows NT 和SQL Server来说是透明的,因为它们都是通过RAID控制器来管理的。RAID 1与RAID 0+1的不同点在于它们的硬件控制器级别不同。RAID 1 和 RAID 0+1对相同数量的存储要求相同数目的磁盘。若想获得关于具体RAID控制器的RAID 0+1的实现细节,请与生产这种控制器的硬件供货商联系。下面这个图显示了RAID 0, RAID 1, RAID 5

58、 与RAID 0+1的不同点。要保存四个磁盘的数据, RAID 1 ( 同样也适用于RAID 0+1)需要八个磁盘进行存储。一定要与合适的硬件供货商联系,以获取更多的有关运行数据库服务器时RAID在硬件上的实现细节。普通RAID 等级 联机RAID扩充联机 RAID扩充是RAID的一个特征,它指的是只要有空闲的热插拔插槽,就可以在不退出SQL Server的情况下,动态地向RAID磁盘阵列中添加磁盘。许多硬件供货商都为它们的RAID控制器在硬件上实现这一功能。数据将自动在所有磁盘上重新均匀分块,其中包括新加入的磁盘,而且不需要关掉SQL Server 或者 Windows。只要在磁盘阵列 容器

59、中留出空闲插槽就可以使用这一功能。这样,如果 SQL Server向RAID磁盘阵列提出的I/O请求总是超过标准(可以通过观察与RAID磁盘阵列相联系的Windows 逻辑驱动器的磁盘队列长度得到),那么可以在不影响SQL Server运行的情况下,向热插拔插槽中加入一个或多个硬盘。RAID 控制器向这些新插入的磁盘重新分配某些SQL数据,以使SQL数据均匀分布于RAID磁盘阵列的所有磁盘上。这样,RAID磁盘阵列的总体I/O处理能力增强了,包含进了新磁盘的 I/O处理能力(每个磁盘每秒75次非顺序I/O操作,或者150次顺序I/O操作)性能监控器和RAID在性能监控器(Performance

60、 Monitor)中,逻辑磁盘对象和物理磁盘对象提供相同信息。不同点是:性能监控器中的逻辑磁盘与Windows NT 中的逻辑磁盘的相对应;性能监控器中的物理磁盘与Windows NT中的单个物理磁盘相对应。 在命令行窗口使用diskperf.exe 命令,可以实现性能监控器的计数功能。如果加一个开关项: diskperf y ,那么当只使用硬盘、或者RAID控制器与硬盘同时使用时,性能监控器可以报告逻辑盘数目和物理盘数目,而不需使用Windows NT 的软件RAID方法。 当运行Windows NT 软件 RAID时,使用命令:diskperf ye ,这样性能监控器可以正确地报告由Win

61、dows NT分块的物理盘片数目。在这种用Windows NT软件方法分块的情况下,用命令diskperf ye,逻辑盘计数器将不能报告正确的信息,它提供的消息必须舍去。如果用Windows NT软件方法分块,而同时又想知道逻辑盘的数目,那么用diskperf y 命令。用Windows NT软件方法分块和diskperfy ,逻辑盘计数器可以报告准确的信息,但是这时物理盘计数器却不能报告准确信息,需将它提供的消息舍去。Windows NT必须重新启动, diskperf -y 命令才能有效。硬件 RAID控制器 将组成Windows操作系统的一个RAID镜像组(mirrorset)或磁盘分块

62、(stripeset )的多个硬磁盘作为一个单独的物理磁盘来处理。磁盘管理器用来将逻辑盘符与单个的物理磁盘相联系,它不需要知道RAID控制器操纵的实际硬盘数目。你应该知道RAID磁盘阵列中的实际硬盘数目,以便决定Windows 操作系统 和SQL Server向每个物理磁盘发送的磁盘I/O请求。将性能监控器报告的、与硬盘相关的磁盘I/O请求数目除以RAID阵列中实际的物理硬盘数。 若想估计RAID磁盘阵列中每个硬盘的I/O活动,请将性能监控器报告的磁盘I/O写操作数乘以2(RAID 1及RAID 0+1),或乘以4(RAID 5)。这样将准确地计算出送往物理硬盘的I/O请求数。这是物理级的硬盘

63、I/O处理能力(每个磁盘75次非顺序操作或150次顺序操作)。但是如果当RAID使用高速缓存时,不能再用这种方法计算硬盘的访问次数,因为高速缓存会改变硬盘的实际访问次数。 若不考虑I/O产生的问题,监测磁盘排队是一个最佳方案。Windows操作系统不知道RAID磁盘阵列中的物理磁盘数,因此,为准确评估每个物理磁盘的磁盘排队情况,需要将磁盘队列的长度除以RAID磁盘阵列中包含的物理磁盘数。将这一数据保存在包含有SQL Server 文件的两个硬盘中。 若想获取有关SQL Server和RAID更多的资料,请查看SQL Server 7.0联机帮助中的以下主题:RAID 级别和SQL Server

64、, 比较不同等级RAID的不同实现,监测磁盘活动,性能管理举例:识别瓶颈现象,关于基于硬件的解决方案,以及RAID。Windows NT 软件方式RAIDWindows NT 通过Windows NT操作系统,而不是硬件RAID控制器,实现镜像组(mirrorset)和磁盘分块(stripeset),从而为硬盘提供了容错功能。Windows NT 磁盘管理器既可以定义镜像组(RAID 1),又可以定义使用奇偶校验的磁盘分块(RAID 5)。Windows NT 磁盘管理器还允许定义没有容错功能的磁盘分块 (RAID 0)。软件方式RAID 使用更多的CPU 资源,因为是通过Windows NT 来管理RAID,而不是用硬件RAID控制器完成相应的工作。这样,如果处理器接近100%的利用率,那么对于同样数目的磁盘,使用Windows NT 软件方式RAID的性能要比使用硬件RAID的性能低几个百分点。但是 Windows NT 软件方式RAID通常情况下可以使SQL Server I/O 更好地协同工作,减少了I/O瓶颈现象的发生,通过SQL Server提高了CPU利用率,增大了数据流量。若想获取更多的有关配置Windows NT软件方式 RAID的资料,请参考 Win

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!