动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
电脑书籍下载:程序设计书籍 | 数据库教程书籍 | 平面与多媒体书籍 | 网络通讯书籍 | 系统管理书籍 | 网络安全书籍 | 认证考试书籍
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库学院 > 数据库技巧
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Access教程,DB2教程,数据库安全,数据库文摘
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ 数据库技巧 ]的信息



本月文章推荐
.带你深入了解数据库管理系统层次.
.依赖于其他表格的标准轻松在表格.
.DBA:巧用ora2html收集Oracle数据.
.MS SQL数据库备份和恢复存储过程.
.SQL Server 2008综合数据可编程性.
.经验总结:SQL Server与Oracle的.
.数据库完整性就是数据库完整性约.
.使用"hint"设置视图内的SQL查询方.
.通过查询分析器对比SQL语句的执行.
.为什么要升级到SQL Server 2005 .
.sql server的cube操作符使用详解.
.SQL Server 2005数据加密技术的实.
.在SQL Server 2005中用存储过程实.
.SQL Server安装:"安装文件配置服.
.log4net和SQL Server 2000.
.在SQLServer中怎么样恢复数据的存.
.SQL技巧:创建用来按小时报告的查.
.探讨SQL Server存储过程.
.无数据库日志文件恢复数据库方法.
.建立Microsoft SQL Server 2005数.

教你轻松解决SQL Server 2000 SP4的问题

发表日期:2007-11-21 |


像 SQL Server 这样的数据库管理系统依赖于文件输入/输出操作的及时进行。有故障或配置不当的硬件、固件设置、筛选器驱动程序、压缩、程序错误以及 I/O 路径内的其他情况都可能导致阻塞或延迟 I/O 问题,并且很快对 SQL Server 性能产生消极影响。

上述问题对 SQL Server 的影响因问题细节的不同而差异很大,但它们通常导致阻塞、锁存器争用和超时、过长的响应时间以及资源的过度利用。

阻塞 I/O 是指必须进行外部干预才能完成的 I/O 请求(通常是 I/O 请求包 (IRP))。这种状况通常需要执行完整的系统重新启动或类似操作才能解决,并且强烈表明硬件有故障或者在 I/O 路径组件中存在程序错误。

延迟 I/O 是指无需干预即可完成但所花时间超过预期时间的 I/O 请求(同样,这通常是 IRP)。这种状况的原因通常是硬件配置、固件设置或筛选器驱动程序干预,需要硬件或软件供应商提供帮助以便跟踪和解决。

SQL Server 2000 SP4 包含数据库和日志文件 I/O(读和写)逻辑以便检测延迟和阻塞状况。当 I/O 操作经过 15 秒钟或更长时间仍未完成时,SQL Server 会检测到并报告这一状况。以下消息将被记录到 SQL Server 错误日志中:


2007-11-1 00:21:25.26 spid1 SQL Serverhas encountered 192
occurrence(s) of IO requests taking longer than 15 seconds to complete
on file [E:\SEDATA\stressdb5.ndf] in database [stressdb] (7). The OS
file handle is 0x00000000000074D4. The offset of the latest long IO is:
x00000000022000".
 

该消息表明,当前工作负载需求超出了 I/O 路径或当前系统配置和功能,或者 I/O 路径含有不能正常工作的软件(固件、驱动程序)或硬件组件。

所记录的错误信息提供了以下信息:

• ### occurrences — 未能在 15 秒钟以内完成读或写操作的 I/O 请求的数量。

• File information — 完整的文件名、数据库名和受影响文件的 DBID。

• File handle — 该文件的操作系统句柄。可以通过调试器和其他实用工具来使用这一信息跟踪 IRP 请求。

• Offset — 上一个阻塞或延迟 I/O 的偏移量。可以通过调试器和其他实用工具来使用这一信息跟踪 IRP 请求。(注:在记录该消息的时候,该 I/O 可能不再阻塞或延迟。)

记录与报告
I/O 的报告和记录是按照文件执行的。延迟和阻塞 I/O 请求的检测和报告是两个不同的操作。

检测(记录)是在 SQL Server 内部的两个位置处理的。第一个位置是在 I/O 实际完成的时候。如果请求花费了 15 秒钟以上,则发生记录操作。第二个位置是在延迟写入器进程执行的时候。当延迟写入器执行时,它包含新的对所有挂起的数据和日志文件 I/O 请求进行检查的操作,并且,如果已经超过了 15 秒钟的阈值,则会发生记录操作。

报告是按照不低于 5 分钟的时间间隔执行的。当对文件进行下一次 I/O 请求时,发生报告操作。如果记录操作已经发生,并且自上一次报告发生以来已经过去了 5 分钟或更长时间,则向错误日志中写入新的报告(上面显示的错误消息)。

15 秒钟的阈值当前是不可调整的。尽管不推荐这样做,但您可以用跟踪标志 830 完全禁用延迟和阻塞 I/O 检测。在 SQL Server 启动期间设置启动参数 –T830 可以禁用延迟/阻塞 I/O 检测。使用 dbcc traceon(830, -1) 可以禁用对当前正在运行的 SQL Server 实例的检测。只有重新启动 SQL Server,Dbcc traceon 才会生效。

注:延迟或阻塞的给定 I/O 请求只会报告一次。如果消息报告 10 个 I/O 被延迟,则这 10 个报告不会再次发生。如果下一个消息报告 15 个 I/O 被阻塞,则表明 15 个新的 I/O 请求已经被延迟。


性能和计划操作


总体系统性能可能在 I/O 处理中扮演关键的角色。在研究延迟或阻塞 I/O 的报告时,应该考虑系统的综合运行状况。过多的负载可能导致整个系统(包括 I/O 处理)变慢。系统在发生问题时的行为可能是确定问题根源的关键所在。例如,如果 CPU 利用率在发生问题时变高或者保持较高水平,则可能表明系统中的某个进程正在消耗如此之多的 CPU 时间,以至于它以各种方式对其他进程产生了消极影响。

请查看性能计数器 Average Disk Sec/Transfer 以及 Average Disk Queue Length 或 Current Disk Queue Length,以获得特定的 I/O 路径信息。例如,SQL Server 计算机上的 Average Disk Sec/Transfer 通常低于 15ms。如果该值上升,则可能表明 I/O 子系统无法满足 I/O 要求。

请记住,SQL Server 充分利用了 Windows 的异步 I/O 功能,并且猛烈地扩展磁盘队列长度,因此上述性能计数器具有较高的值本身并不表明存在问题。


索引和并行性


特别常见的一种情况是,因为索引丢失以及由此导致的扫描、哈希和排序对 I/O 系统造成的压力,所以突发大量的 I/O。运行一遍“Index Turning Wizard”通常会有助于解决系统的 I/O 压力。如果添加索引可以帮助查询避免表扫描甚至排序或哈希,则系统可以获得多个优点:

• 减少完成操作所需的物理 I/O,这直接等效于提高查询的性能。

• 数据缓存中只有较少的页面必须周转,因此缓存中的那些页面可以一直与活动查询相关。

• 避免不必要的排序和哈希。

• 可以降低 tempdb 利用率和减少争用情况。

• 减少资源利用率和/或并行操作。因为 SQL Server 不能保证服务器在确定是否将查询并行化时考虑并行查询执行和系统中的负载,所以您最好针对串行执行优化所有查询。在 Q/A 环境中,应该将 max degree of parallelism 设置为 1,以便对根本没有从服务器收到任何并行计划的最糟糕情况强行进行调整。如果在测试环境中证实查询可以按串行方式高效执行,则生产环境中的并行计划可以提供出乎意料的性能改进。但是,很多情况下,SQL Server 选择并行执行,这是因为要遍历数据的绝对数量过于庞大。该数据量通常直接受到索引的影响。例如,如果丢失索引,则可能产生大量排序操作。我们很容易就可以看出,执行排序操作的多个辅助进程如何使响应速度比以串行方式处理排序更快速,不过我们需要了解,该操作可能大幅增加 I/O 系统的压力。当多个辅助进程并发运行时,来自多个辅助进程的大型读请求可能导致 I/O 突发以及 CPU 利用率提高。很多时候,如果添加了索引或者发生了其他调整操作,则可以调整查询以使其更快地运行并使用更少的资源。这不仅提高了相关查询的性能,而且还提高了系统的整体性能。
来自 Microsoft SQL Server Support 的实际示例
Microsoft SQL Server 和 Platforms Escalation Support 已经处理了下列方案,这些方案旨在提供一个参考框架,并且帮助树立有关延迟和阻塞 I/O 情况以及系统可能如何受到影响的预期。不存在给其他软硬件带来任何特殊或更高风险的特殊硬件或驱动程序集;在这个方面,所有系统都是相同的。

示例 1 — 阻塞 45 秒钟的日志写操作:

一个尝试性的 SQL Server 日志文件写操作周期性地阻塞 45 秒钟。该日志写操作无法及时完成,从而产生阻塞情况,导致 30 秒钟的客户端查询超时。

请求被提交并阻塞(日志写挂起),导致查询继续占用锁并且阻塞来自其他客户端的传入请求。其他客户端开始超时并且使问题变得复杂,这是因为应用程序没有被设计为在发生超时的时候回滚尚未解决的事务。这会导致数以百计尚未解决的事务占用锁以及严重的阻塞。(有关事务处理和阻塞的详细信息,请参阅 INF: Understanding and Resolving SQLServer 7.0 or 2000 Blocking Problems)。应用程序使用连接池来维护 Web 站点,因此,随着更多的连接被阻塞,Web 站点创建了更多的连接,而这些连接又会被阻塞,该循环会一直持续下去。

在大约 45 秒钟之后,该日志写操作将完成,但到此时为止,数以百计的连接已经积累起来,从而导致阻塞问题,并使得 SQL Server 和应用程序需要花费几分钟的时间进行恢复。当与应用程序问题结合起来的时候,延迟 I/O 状况会对系统产生非常消极的影响。

解决办法:这归因于 HBA 驱动程序中的延迟 I/O 请求。计算机具有多个带有故障转移支持的 HBA 卡。故障转移超时值被配置为 45 秒。当一个 HBA 落后或者在 45 秒钟或更长时间内未与 SAN 通信时,该 I/O 请求被路由到第二个 HBA 进行处理,并且会很快完成。硬件产品的推荐故障转移设置为 5 秒钟,以便避免出现这样的延迟状况。
如果在 SQL Server 2000 SP4 中已经有了新的自动报告该状况的功能,那么我们在疑难解答过程中就可以很快知道,基本问题是由于 SQL Server 外部的问题而发生的阻塞或延迟 I/O 操作。事实上,我们花费了大量时间来解决一个在最初呈现为普通性能问题的问题。

示例 2 — 筛选器驱动程序干预:

许多防病毒软件和备份产品使用 I/O 筛选器驱动程序。这些筛选器驱动程序成为 I/O 请求栈的一部分,并且可以访问 IRP 请求。Microsoft 技术支持部门已经遇见过各种问题 — 从导致阻塞 I/O 的错误到筛选器驱动程序实现中的延迟状况。

其中,Microsoft SQL Server 技术支持部门遇到的一种情况是,涉及到用于备份处理(该过程能够备份在备份时处于打开状态的文件)的筛选器驱动程序。系统管理员错误地在文件备份选择中包括了 SQL Server 数据文件目录。当备份发生时,它试图收集备份开始时文件的一致镜像。在完成该操作时,它将延迟后续的 I/O 请求,使它们能够在软件处理它们时逐个完成。

当备份开始时,SQL Server 的性能会急剧下降,因为针对 SQL Server 的 I/O 被强迫逐个完成。使该问题变得更为复杂的是,单 I/O 逻辑的特点使得 I/O 通常无法异步执行,因此当 SQL Server 期望发送 I/O 请求并继续工作时,UMS 辅助进程却在 I/O 完成之前一直阻塞在读或写调用中。SQL Server 预读功能实际上被筛选器驱动程序的操作禁用了。而且,即使当备份完成时,筛选器驱动程序中的另一个程序错误仍然使单 I/O 行为保持不变。恢复 SQL Server 性能的唯一方法是关闭数据库并重新打开它或者重新启动 SQL Server,以便在当前筛选器驱动程序交互未就绪的情况下释放并重新获取文件句柄。

解决办法:将 SQL Server 的数据文件从文件备份过程中排除,并且解决筛选器驱动程序中的导致文件被置于单 I/O 模式的程序错误。

示例 3 — 隐藏的错误:

很多高端系统具有用于处理负载平衡的多通道 I/O 路径以及类似的工具。Microsoft SQL Server 技术支持部门已经见过使用此类软件的情况,其中,尽管 I/O 请求失败,但软件确实正确地处理了错误状况,并且执行了无数次重试。I/O 被阻塞,并且 SQL Server 无法完成指定的操作。与上面描述的日志写状况非常类似,在这样的状况对系统产生了消极影响之后,发生了很多糟糕的系统行为。

解决办法:在类似情况下,重新启动 SQL Server 可以在一定程度上缓解问题,但是,有时需要重新启动 Windows 来使处理恢复到正常状态。当然,I/O 子系统中的程序错误最终需要由 I/O 供应商解决。

SQL Server 2000 SP4 的新的对此类状况进行自动报告的功能使得类似问题的检测变得更加容易。我们不仅可以看到整个服务器的总体性能下降,而且还可以通过 SP4 所记录的新消息洞察问题的本质,并且知道该问题很可能出在 SQL Server 外部。


示例 4 — 远程存储/镜像/RAID 驱动器:

很多系统使用镜像或类似的技术来帮助防止丢失数据。其中一些系统是基于软件的,而其他系统是基于硬件的。Microsoft SQL Server 技术支持部门经常遇到的与这些系统有关的情况是延迟增加。

当针对镜像的 I/O 必须在 I/O 操作被视为完成之前成功完成时,这显然会增加总体 I/O 时间。对于远程镜像安装,网络延迟和重试可能成为一个不利因素。当发生驱动器故障并且 RAID 子系统重新生成时,I/O 吞吐量可能会受到影响。

解决办法:在类似情况下,我们通常建议使用严格的配置设置(这随供应商和设备而异),以减少镜像延迟和 RAID 重新生成操作。

RAID 系统开销和延迟可能导致 I/O 变慢,而 SQL Server 对此无能为力。就像任何其他应用程序一样,它是 RAID 硬件和驱动程序的客户端。当该类型的问题使服务器的速度过度降低时,SP4 中新的延迟和阻塞 I/O 报告功能有助于查明问题所在。

示例 5 — 压缩:

Microsoft 不在压缩驱动器上支持 SQL Server 7.0 或 2000 数据和日志文件。NTFS 压缩是不安全的,这不仅是因为它破坏了预写日志 (WAL) 协议,而且还因为它要求对每个 I/O 请求执行更多的处理。压缩禁止了异步 I/O,从而导致所有带有受影响数据或日志文件的 SQL Server I/O 都被同步执行。

解决办法:在这种情况下,我们总是建议客户解压缩他们的数据和日志文件。

NTFS 压缩可能导致 I/O 变慢,而 SQL Server 对此无能为力。就像任何其他用户模式应用程序一样,它是文件系统的客户端。当压缩对 SQL Server I/O 操作产生不利影响时,SP4 中新的延迟和阻塞 I/O 报告功能有助于查明问题所在。

附加数据点

系统进程中提供的等待类型信息可能有助于诊断 I/O 瓶颈。缓冲区 I/O 锁存器等待类型和写日志等待是调查 I/O 路径性能的关键指标。Microsoft 知识库文章 822101: The waittype and lastwaittype fields in the sysprocesses table 概述了等待类型,并且详细介绍了与诊断延迟或阻塞 I/O 状况有关的 I/O 等待类型。


上一篇:SQL Server 2008的新压缩特性 人气:1394
下一篇:SQL Server 2008性能和扩展 人气:1718
浏览全部SQL Server 2000 SP4的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-7-8 ECShop v2.6.0 Build 20080707(G
2008-7-8 动网论坛PHP版 v2.0++ Build 080
2008-7-8 中国IT总舵 v9.0 UTF版
2008-7-8 凹丫丫新闻发布系统 v4.6 Build
2008-7-8 topview数据查询 v3.0
2008-7-8 Z-Blog v1.8 Spirit Build 80708
2008-7-8 Z-Blog v1.8 Spirit Build 80708
2008-7-8 凹丫丫新闻发布系统 v4.6 Build
2008-7-8 新动软万能网站内容管理cms系统
2008-7-5 AgileMessenger即时通讯工具 v1.
2008-7-5 GoodCalculator2.0版固件计算器
2008-7-5 RepoName源地址搜索工具 v1.21b
2008-7-5 AgileMessenger即时通讯工具 v1.
2008-7-5 TouchCopy多媒体管理软件 v3.13完
2008-7-5 VideosTone视频铃声 v1.1汉化破解
2008-7-5 TouchPad触摸板 v4.44破解版
2008-7-5 VideosTone破解补丁 v1.0
2008-7-5 Feeds GoogleReader客户端 v0.4.3


  发表评论
姓 名: 验证码:
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報