诊断在 SQL Server 2000 SP4 和更高版本中帮助您检测停止和卡住 I/O 操作

文章翻译 文章翻译
文章编号: 897284 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

概要

数据库管理系统 (DBMS) such as SQL Server,依赖于文件输入和输出 (I/O) 的及时性操作。 以下各项的任何一个可能会创建被卡住或推迟 I/O 问题。这些问题可以快速有不利影响 SQL Server 响应能力和性能:
  • 有故障的硬件
  • 配置不正确的硬件
  • 固件设置
  • 筛选器驱动程序
  • 压缩
  • bug
  • I/O 路径中的其他条件
这些 I/O 问题可能会导致出现以下行为:
  • 阻止
  • 闩锁争用和超时
  • 较慢的响应时间
  • 拉伸的资源边界
从 Microsoft SQL Server 2000 Service Pack 4 (SP4) 开始 SQL Server 包括可帮助检测推迟并且堵塞数据库 I/O 读取和写入和日志文件 I/O 读取和写入操作的条件的逻辑。当 I/O 操作已挂起,15 秒钟或更长的时间时,SQL Server 执行以下步骤:
  1. 检测到已挂起的操作。
  2. SQL Server 错误日志中写入一条信息性消息。消息的文本是类似于以下内容:

    2004-11-11 00:21:25.26 spid1 SQL Server 遇到 192 occurrence(s) 的 IO 请求比 15 秒的时间长以完成对文件 [E:\SEDATA\stressdb5.ndf] 数据库 [stressdb] (7) 中。 操作系统文件句柄是 0x00000000000074D4。 偏移量的最新的长 IO 是: 0x00000000022000。

信息性消息说明

收起该表格展开该表格
消息文本说明
Number occurrence(s)读取或写入操作在不超过 15 秒内未完成的 I/O 请求数。
文件信息完整的文件名称、 数据库名称和数据库标识号 (DBID)。
句柄该文件的操作系统句柄。可以使用操作系统句柄与调试程序或其他实用程序以帮助跟踪 I/O 请求数据包 (IRP) 请求。
偏移量上一次的偏移量卡住 I/O 操作或最后一个推迟 I/O 操作。可以使用偏移量与调试程序或其他实用程序以帮助跟踪 IRP 请求。

注意SQL Server 错误日志写入信息性消息时, 在 I/O 操作可能不会再被卡住或推迟。
此信息性消息表示的当前负载可能遇到以下情况之一:
  • 工作负荷超出 I/O 路径功能。
  • 工作负荷超出当前的系统功能。
  • I/O 路径具有不能正常工作的软件 ; 可能是一个固件或驱动程序问题。
  • I/O 路径有故障的硬件组件。
有关 SQL Server 2000 I/O 模式的详细信息,请访问下面的 Microsoft 网站:
http://technet.microsoft.com/en-us/library/cc966500.aspx

更多信息

卡的 I/O 和停止的 I/O

卡的 I/O

卡的 I/O 被定义为未完成的 I/O 请求。 通常,卡住的 I/O 就是被卡住的 IRP。若要解决卡住的 I/O 条件,您通常必须重新启动计算机或执行类似的操作。卡住的 I/O 条件通常表明以下值之一:
  • 有故障的硬件。
  • 一个 I/O 路径组件中的错误。

停止的 I/O

停止的 I/O 被指的不完整的 I/O 请求。然而,在 I/O 操作将过多的时间才能完成。停止的 I/O 行为通常出现是由于下列原因之一:
  • 硬件配置中。
  • 固件设置。
  • 需要从硬件或软件供应商的帮助来跟踪和解决的筛选器驱动程序问题。

SQL Server 推迟 I/O 并且堵塞 I/O 记录和报告

Microsoft SQL Server 支持处理很多情况下每年涉及滞留或停止 I/O 问题。 如所述,以后这些 I/O 问题出现在不同的方式不同。I/O 问题是一些最困难的问题来诊断和调试。I/O 问题进行调试从 Microsoft 和客户需要大量的时间和资源。报告功能已添加到 SQL Server 2000 SP4 和更高版本中显著减少标识一个 I/O 问题时所需的时间。

该报告和 $ I/O 请求的记录是在每个文件的基础上而设计的。检测和 $ 停止和卡住 I/O 请求的报告是两个单独的操作。

录制

有两个位置中 SQL Server 记录操作发生的位置。第一个位置中的记录发生,是在 I/O 操作的实际完成。 如果 I/O 请求需要超过 15 秒钟才能完成,就会出现一条记录的操作。 惰性写入器运行时,将发生第二个位置中的记录,为。惰性写入器惰性写入器在运行时检查所有挂起的数据和所有在挂起日志文件 I/O 请求。如果 15 秒阈值超出就会出现一条记录的操作。

报告

报告间隔是 5 分钟的时间或多个的时间间隔中发生。当在文件上进行下一个 I/O 请求报告时发生。 如果出现一条记录的操作,并且 5 分钟或更多后经过发生的最后一个报表,"摘要"部分中提到的信息性消息被写入到 SQL Server 错误日志。

15 秒阈值不是可调整的。但是,您可以通过使用跟踪标记 830 禁用停止和卡住 I/O 检测,但我们不建议执行此操作。

若要 SQL Server 启动时,请禁用检测,使用-T830 启动参数。使用启动参数将会禁用检测每次启动 SQL Server-T830。若要使检测 SQL Server 当前正在运行的实例使用以下语句:

dbcc traceoff (830,则为-1)

此设置才 SQL Server 进程的生命周期内有效。

注意将成为推迟或滞留的 I/O 请求只报告一次。如果邮件报告 10 个 I/O 请求会推迟,这些 10 的报表不会再次发生。如果下一条消息报告 15 的 I/O 请求会推迟,这意味着 15 新的 I/O 请求已被推迟。

跟踪 I/O 请求数据包 (IRP)

SQL Server 使用标准的 Microsoft Windows API 调用,读取和写入数据。例如对于 SQL Server 使用以下函数:
  • WriteFile
  • ReadFile
  • WriteFileScatter
  • ReadFileGather
读取或写入请求由 Windows 为 I/O 请求数据包 (IRP) 处理。 若要确定在 IRP 的状态,使用以下两个:
  • Microsoft 平台支持的帮助。
  • 内核调试程序。
有关 IRP 和 IRP 的详细信息跟踪,请访问以下 Microsoft 网站和搜索关键字"IRP":
http://support.microsoft.com
注意 内核调试可能会干扰的过程,因为内核调试可以要求您可以停止系统以完成调试操作。 我们建议您查看是否有任何更新可用的下列项目:
  • BIOS
  • 固件
  • 任何其他 I/O 路径组件
在执行其他调试操作之前,请与您的硬件供应商联系。 第三方驱动程序、 固件,或筛选器驱动程序组件,可能会涉及到调试会话。

系统的性能和查询计划的操作

总体系统性能可以 I/O 处理过程中扮演着关键的角色。您应该考虑该系统的一般运行状况时您正在调查的停止或卡 I/O 操作的报告。过多的负载可能导致整个系统到速度较慢。这包括 I/O 处理。在出现问题的时间系统的行为可以确定问题的根本原因的关键因素。例如对于是否 CPU 使用率变得高,或者出现该问题时,CPU 使用率仍然很高此行为可能表明在系统上的某个进程正在使用如此多的 CPU 产生负面影响其他进程。

性能计数器

若要监视的 I/O 性能,检查下列性能计数器的特定的 I/O 路径信息:
  • 平均磁盘秒/传输
  • 平均磁盘队列长度
  • 当前磁盘队列长度
例如对于计算机上正在运行 SQL Server 的平均磁盘秒/传输时间通常为少于 15 毫秒。 如果平均磁盘秒/传输值 climbs,这表明 I/O 子系统不以最佳方式跟上 I/O 请求。

小心性能计数器因为 SQL Server 充分利用推磁盘队列长度很大程度的异步 I/O 能力。因此,单独较长磁盘队列长度并不表示有问题。

在 Windows 系统监视器中,您可以查看计数器"物理磁盘: 磁盘字节数/秒"为每个受影响的磁盘和比较对计数器的活动的速率中"处理:: IO 数据字节/秒"和过程: IO 其他字节数/秒为每个进程确定还是一组特定的进程生成过多的 I/O 请求。有各种其他 I/O 相关可在处理计数器对象的显示更加精细的信息。如果您确定 SQL Server 实例负责在服务器上的过多的 IO 负荷,查看在索引和并行性下一节。有关检测和解决 I/O 瓶颈上详细讨论,查看 MSDN 白皮书 Troubleshooting Performance Problems in SQL Server 2008 中的节 I/O 瓶颈或 Troubleshooting Performance Problems in SQL Server 2005

索引和并行度

经常,突发 I/O 的发生是因为缺少一个索引。此行为可以很大程度推送 I/O 路径。一遍与该索引打开向导 (ITW) 可以帮助解决在系统上的 I/O 压力。如果查询从表扫描而不是索引从中受益,或者可能甚至使用排序或哈希,系统可以获得下列优点:
  • 减少物理 I/O 直接完成该操作等同于查询的性能收益。
  • 必须处于打开状态,在数据高速缓存的页少。因此,数据高速缓存中这些页面保持相关活动的查询。
  • 因为索引可能已丢失,或者因为统计信息已过时,则使用排序和哈希值。通过添加一个或多个索引,您可能会降低 tempdb 使用和争用。
  • 减少资源、 减少了并行的操作或这两者。 因为 SQL Server 不能保证执行并行查询,因为被认为是在系统上的负载,最好的做法是优化串行执行的所有查询。 若要优化查询,请打开查询分析器然后 sp_configure 值最大并行度 选项设置为 1。如果所有查询都调整为串行操作立即运行,并行执行通常是只是一个更好的结果。 但是,许多并行执行时间被选中,其原因是只是较大的数据量。 对于一个缺少的索引大排序可能会发生。 正在执行排序操作的多个工作人员将创建一个更快的响应。 但是,此操作可以极大地提高系统的压力。 来自很多工作人员的大型读取的请求会导致与更高的 CPU 使用率的 I/O 爆发从多个工作人员。 很多时候查询可以对其进行调整的运行速度更快,并使用较少的资源,如果添加了索引,或另一个调整操作发生。

从 Microsoft SQL Server 支持的实用示例

已通过 Microsoft SQL Server 支持和平台上报支持处理下面的示例。 这些示例被为了提供参考框架和帮助设置您的期望大约推迟并且堵塞 I/O 的情况下,系统可能会受到影响或可能的方式有关响应。 没有特定的硬件或驱动程序造成任何特定的风险增加于另一个组。所有系统都都在这方面相同。

示例 1: A 日志写入的卡住 45 秒

写尝试周期性地变得卡住的大约 45 seconds 一个 SQL Server 日志文件。 日志写入未及时完成。这种行为,创建为 30 秒客户端超时的阻止条件。

应用程序提交到 SQL Server 提交,并且提交成为堵塞作为挂起日志写入。这种现象导致查询来继续控制锁并阻止来自其他客户端的传入请求。 然后,其他客户端启动超时。此复杂了问题,因为该应用程序不设计查询超时发生时回滚未结交易记录。 这将创建数百个已持有锁的未结交易记录。因此,出现了严重的阻塞情况。

有关处理和阻塞的事务的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
224453了解和解决 SQL Server 7.0 或 2000年阻塞问题
应用程序提供服务使用连接池的网站。阻止变得更多的连接,为该网站将创建更多的连接。这些连接成为被阻止,循环继续。

大约 45 秒钟后日志写入完成。但是,这一次通过数以百计的连接已备份。阻塞问题导致的恢复时间几分钟时间,为 SQL Server 和应用程序。组合与应用程序的问题时, 停止的 I/O 条件在系统上有非常负面影响。
分辨率
主机总线适配器 (HBA) 驱动程序中的卡住 I/O 请求的跟踪问题。 计算机有多个 HBA 卡提供故障转移支持。 当一个 HBA 后面或者无法进行通信的存储区域网络 (SAN) 时,"故障转移之前重试"超时值配置为 45 秒。 当在超时时间已超过时,I/O 请求路由到第二个 HBA。第二个 HBA 处理该请求,并快速完成。若要帮助防止此类隔栏条件,硬件制造商联系,建议使用"故障转移之前重试"设置为 5 秒。

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

许多防病毒软件程序和备份产品都使用 I/O 筛选器驱动程序。 这些 I/O 筛选器驱动程序变得 I/O 请求堆栈的一部分,他们有权访问 IRP 请求。 从创建的 bug 的各种问题卡住 I/O 条件或推迟 I/O 条件筛选器驱动程序实现中的,Microsoft 产品支持服务已检测到。

此类的一个条件时允许备份发生时打开了该文件的备份的备份处理的筛选器驱动程序。系统管理员必须包括 SQL Server 数据文件目录中文件的备份选项。 当发生备份时,备份尝试收集正确的图像文件的备份开始时。 执行此操作推迟 I/O 请求。允许仅完成一次,因为它们由软件处理 I/O 请求。

当启动备份时,SQL Server 性能大大删除,因为 i/o 的 SQL Server 被迫完成一次。 若要复合问题,"一次一个"逻辑时,这样不能以异步方式执行 I/O 操作。因此,SQL Server 预期发布 I/O 请求,并继续执行,工作陷入读取或写入调用直到完成 I/O 请求。 处理任务提前读取一个 SQL Server such as 已有效地禁用筛选器驱动程序的操作。此外,筛选器驱动程序中的另一个 bug 处于"一次一个"操作过程,即使备份已完成。 唯一的方法恢复 SQL Server 性能已关闭,然后重新打开数据库,或重新启动以使文件句柄被释放,而无需筛选器驱动程序交互 reacquired SQL Server。
分辨率
若要解决此问题,SQL Server 数据文件从文件备份过程中删除。软件制造商还解决了留在"一次一个"模式下该文件的问题。

示例 3: 隐藏错误

许多较高的终端系统有多声道输入/输出路径,以处理负载平衡或 $ 类似活动。 Microsoft 产品支持发现了负载平衡的软件的 I/O 请求失败,但是该软件没有正确处理错误条件的问题。该软件可以尝试无限的重试。 在 I/O 操作变得卡住和 SQL Server 无法完成指定的操作。 很像日志写入前面所述的条件,许多较差的系统行为后,可能会出现此类条件 wedges 系统。
分辨率
若要解决此问题,重新启动 SQL Server 通常需要。但是,有时您必须重新启动来还原处理的操作系统。我们还建议您从供应商提供的 I/O 获取软件更新。

示例 4: 远程存储、 镜像,和 Raid 驱动器

许多系统使用镜像或执行类似步骤来防止数据丢失。 某些使用镜像的系统是基于软件,有些是基于硬件。 通常通过为这些系统的产品支持服务发现了这种情况是增加的滞后时间。

增加的总体 I/O 时间之前将 I/O 被视为完整镜像必须完成 I/O 时发生。对于远程镜像安装可以成为涉及网络重试次数。当发生驱动器故障 raid 系统正在重建时也可以中断该 I/O 模式。
分辨率
若要减少滞后于镜像或 raid 重建操作需要严格的配置设置。

示例 5: 压缩

Microsoft 不支持 Microsoft SQL Server 7.0 或 Microsoft SQL Server 2000 数据文件和日志文件的压缩驱动器上。 NTFS 压缩不安全的 SQL Server,因为 NTFS 压缩中断写入领先记录 (WAL) 协议。 NTFS 压缩还需要为每个 I/O 操作的更高的处理。 压缩会创建"一次一个"导致严重的性能问题发生的行为类似。
分辨率
若要解决此问题,解压缩数据和日志文件。

附加数据点

提供 sysprocesses 系统表中的等待类型信息可以帮助诊断 I/O 瓶颈。 缓冲区 I/O 闩锁等待类型和 $ writelog 等待都是调查路径的 I/O 性能的关键指示器。

等待类型有关的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
822101waittype 和 lastwaittype 列中 SQL Server 2000 和 SQL Server 2005 master.dbo.sysprocesses 表中的说明

参考

231619如何使用 SQLIOStress 实用程序来强调 such as SQL Server 磁盘子系统
826433添加到检测未报告的 I/O 问题的其他 SQL Server 诊断程序
230785SQL Server 7.0、 SQL Server 2000 和 SQL Server 2005 日志记录和数据存储算法扩展数据可靠性
SQL Server 需要系统支持有保障的传递到稳定的媒体 Microsoft SQL Server Always-On 存储解决方案审查程序下所述。 Fo有关输入和输出要求 SQL Server 数据库引擎的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
967576Microsoft SQL Server 数据库引擎输入/输出要求

属性

文章编号: 897284 - 最后修改: 2009年8月5日 - 修订: 3.0
这篇文章中的信息适用于:
  • Microsoft SQL Server 2000 Service Pack 4
  • Microsoft SQL 2005 Server Workgroup
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL 2005 Server Enterprise
  • Microsoft SQL Server 2008 Developer
  • Microsoft SQL Server 2008 Enterprise
  • Microsoft SQL Server 2008 Express
  • Microsoft SQL Server 2008 Standard
关键字:?
kbmt kbinfo kbtshoot kbsqlserv2000sp4fea KB897284 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 897284
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com