你目前正处于脱机状态,正在等待 Internet 重新连接

在 SQL Server 中的诊断程序帮助您检测停止并卡住 I/O 操作

重要说明:本文是由 Microsoft 机器翻译软件进行的翻译并可能由 Microsoft 社区通过社区翻译机构(CTF)技术进行后期编辑,或可能是由人工进行的翻译。Microsoft 同时向您提供机器翻译、人工翻译及社区后期编辑的文章,以便对我们知识库中的所有文章以多种语言提供访问。翻译的文章可能存在词汇、句法和/或语法方面的错误。Microsoft 对由于内容的误译或客户对内容的使用所导致的任何不准确、错误或损失不承担责任。

点击这里察看该文章的英文版: 897284
概要
例如,SQL Server 数据库管理系统 (DBMS),文件输入和输出 (I/O) 的及时性依赖于操作。以下各项的任何一个可能导致滞留或停止 I/O 操作,并对 SQL Server 的响应能力和性能产生负面影响:

  • 硬件故障
  • 未正确配置的硬件
  • 固件设置
  • 筛选器驱动程序
  • 压缩
  • Bug
  • 在 I/O 路径中的其他情况
这些 I/O 问题可能会导致出现以下行为:

  • 阻止
  • 闩锁争用和超时
  • 响应时间较慢
  • 资源范围的拉伸
SQL Server 从 Microsoft SQL Server 2000 Service Pack 4 (SP4) 开始,包括帮助检测停止,卡住数据库 I/O 读取和写入和日志文件 I/O 读取和写入的条件的逻辑。当 15 秒钟或更长时间,已挂起的 I/O 操作时,SQL Server 将执行以下步骤:

  1. 检测到操作已挂起
  2. 信息性消息写入 SQL Server 错误日志

    日志消息的文本如下所示:

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

信息性消息解释

消息文本说明
数 > 匹配项读取或不超过 15 秒的写操作未完成的 I/O 请求数。
文件信息完整的文件名称、 数据库名称和数据库标识号 (DBID)。
句柄文件的操作系统句柄。您可以使用操作系统句柄用于调试程序或其他实用程序来帮助跟踪输入/输出请求数据包 (IRP) 请求。
偏移量上一次的偏移量卡住 I/O 操作或最后一个停止 I/O 操作。您可以使用偏移量与调试程序或其他实用程序来帮助跟踪 IRP 请求。

注意当信息性消息写入 SQL Server 错误日志时,可能不再卡住或停止 I/O 操作。
此信息性消息表示,当前负载可能遇到下列情况之一:

  • 工作负荷超过输入/输出路径功能。
  • 工作负荷超过当前的系统功能。
  • I/O 路径已不能正常工作的软件;也许是固件或驱动程序问题。
  • I/O 路径有故障的硬件组件。
有关 SQL Server 2000 I/O 模式的详细信息,请访问以下 Microsoft 网站:注意此 TechNet 文章也适用于 Microsoft SQL Server 2005年及更高版本中。
更多信息

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

被卡住的 I/O

被卡住的 I/O 被定义为未完成的 I/O 请求。通常情况下,I/O 卡指示卡住的 IRP。要解决滞留的 I/O 条件,通常必须重新启动计算机或执行类似操作。被卡住的 I/O 条件通常表明下列情况之一:

  • 硬件故障
  • I/O 路径组件中的错误

停止的 I/O

停止的 I/O 被指的 does 完成或带有过多的时间才能完成的 I/O 请求。停止的 I/O 行为通常发生由于以下原因之一:

  • 硬件配置
  • 固件设置
  • 需要援助的硬件或软件供应商,跟踪和解决的筛选器驱动程序问题

SQL Server 停止 I/O,卡住 I/O 记录和报告

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

在每个文件的基础上设计报告和记录输入/输出请求。检测和停止并卡住 I/O 请求的报告是两个独立的操作。

记录

有记录操作发生在 SQL Server 中的两个时刻。第一种是当实际完成 I/O 操作。超过 15 秒钟完成 I/O 请求时,会发生记录操作。惰性写入器运行时的第二个时刻。惰性写入器在运行时,惰性写入器检查挂起的所有数据和所有挂起的日志文件输入/输出请求。如果超过了 15 秒阈值,则发生记录操作。

报告

在分离是 5 分钟或更多的时间间隔中发生的报告。对文件进行下一个 I/O 请求时发生报告。如果出现记录操作,5 分钟或更多通过以来出现的最后报告,"摘要"一节中提到的信息性消息写入 SQL Server 错误日志。

15 秒阈值是不可调整的。但是,您可以禁用停止或卡住 I/O 检测使用跟踪标志 830,虽然我们不建议您这样做。

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

dbcc traceoff (830,-1)
此设置是仅对 SQL Server 进程的生存期内有效。

注意变得停转或卡住的 I/O 请求报告一次。例如,如果消息报告将推迟 10 个 I/O 请求,这些 10 项报告不会再次发生。如果下一条消息报告,暂停 15 输入/输出请求,这意味着 15 新 I/O 请求已受阻。

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

SQL Server 使用标准的 Microsoft Windows API 调用来读取和写入数据。例如,SQL Server 将使用以下函数:

  • 写文件
  • ReadFile
  • WriteFileScatter
  • ReadFileGather
读取或写入请求由 Windows 处理作为一个 I/O 请求数据包 (IRP)。要确定 IRP 的状态,请使用以下两种:

  • Microsoft 平台支持的帮助
  • 内核调试程序
有关更多信息 IRP IRP 跟踪,请转到下面的 Microsoft 网站和搜索关键字"IRP":注意内核调试可能会侵害性的过程,因为内核调试要求您停止系统以完成调试操作。我们建议您检查以下各项的任何可用更新:

  • 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 充分利用大量推的磁盘队列长度的异步输入/输出功能使用性能计数器时要小心。因此,仅较长磁盘队列长度并不表示存在问题。

在 Windows 系统监视器中,您可以查看计数器"物理磁盘: 磁盘的字节数/秒"为每个受影响的磁盘,然后比较对"过程:: IO 数据字节数/秒"的计数器的活动率和"过程: IO 其他字节数/秒"为每个进程来确定一组特定的进程产生过多的 I/O 请求。有各种其他 i/o 操作相关的进程中可用的计数器对象的显示更详细的信息。如果您确定 SQL Server 实例负责在服务器上的 IO 负载过大,查看下一节"索引和并行性"上。用于检测和解决 I/O 瓶颈问题的详细讨论,查看 MSDN 白皮书中的"I/O 瓶颈"一节 在 SQL Server 2008年中的性能问题的疑难解答在 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: 日志写入 45 秒被卡住

试图写入 SQL Server 日志文件定期成为滞留大约 45 秒。日志写入未及时完成。该行为会导致阻塞条件导致 30 秒客户端超时。

应用程序提交到 SQL Server 提交和提交成为卡作为日志写入挂起。这种现象使查询继续控制着一些锁并阻止其它客户端的传入请求。然后,其他客户端启动超时。因为应用程序不会回滚未结交易记录查询超时发生时,这会导致问题。这将创建数百个持有锁的未结交易记录。因此,发生严重的阻塞情况。

事务处理和阻止有关的详细信息,请参阅下面的 Microsoft 知识库文章:应用程序通过使用连接池服务网站。更多的连接被阻止,该网站将创建更多的连接。这些连接被阻止,并循环就会继续。

大约 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 请求。Microsoft 产品支持服务已经看到创建的 bug 中的各种问题卡住 I/O 的情况或停止 I/O 中的筛选器驱动程序实现的情况。

这样的一个条件是允许备份发生时所打开的文件的备份的备份处理的筛选器驱动程序。系统管理员已包含 SQL Server 数据文件目录中的文件的备份选项。备份时,备份尝试备份开始时收集文件的正确的图像。执行此操作延迟输入/输出请求。I/O 请求被允许按处理软件完成仅有一次。

备份启动时,SQL Server 性能大大丢弃,因为 SQL Server I/o 被迫完成一次。以复合问题,"一次"的逻辑是,不能以异步方式执行 I/O 操作。因此,SQL Server 要求发布 I/O 请求并继续,工作人员陷入读取或写入调用 I/O 请求完成之前。处理任务,如 SQL Server 预读已有效地禁用的筛选器驱动程序的操作。此外,另一个筛选器驱动程序中的 bug 处于"一次"操作过程中,即使备份已完成。恢复 SQL Server 性能的唯一方法是关闭并重新打开数据库,或重新启动 SQL Server,以使文件句柄被释放并重新获取无需筛选器驱动程序交互。
本地
若要解决此问题,SQL Server 数据文件已从文件备份过程。软件开发商还更正了左"一次"模式文件的问题。

示例 3: 隐藏的错误

许多高端系统具有多通道输入/输出路径来处理负载平衡或类似活动。Microsoft 产品支持具有发现问题的负载平衡的软件 I/O 请求就会失败,但该软件不正确处理错误条件。该软件还可以尝试无限重试次数。I/O 操作变为卡住,SQL Server 无法完成指定的操作。与日志写入前面所述的条件,许多不好的系统行为可能会发生此类条件 wedges 系统。
本地
要解决此问题,请重新启动 SQL Server 通常是需要。但是,有时您必须重新启动操作系统还原处理。我们还建议您从 I/O 供应商获取软件更新。

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

许多系统使用镜像,或采取类似措施,以防止数据丢失。一些使用镜像的系统都是基于软件的一些是基于硬件的。这些系统通常发现 Microsoft 支持部门的情况是延迟增加。

I/O 完成后到镜像才能被视为完整事实 I/O 时发生总体 I/O 时间的增加。对于远程镜像安装,可以参与网络重试次数。当出现故障的驱动器和 raid 系统正在重建时,I/O 模式也可能会中断。
本地
严格的配置设置都需要减少延迟到镜像或 raid 重建操作。

详细信息,请参阅 SQL Server 支持远程镜像的用户数据库的要求.

示例 5: 压缩

Microsoft 不支持 Microsoft SQL Server 7.0 或 Microsoft SQL Server 2000年数据文件和日志文件在压缩驱动器上。因为 NTFS 压缩中断写前日志记录 (WAL) 协议,是不安全的 SQL Server NTFS 压缩。为每个 I/O 操作,NTFS 压缩还需要提高的处理。压缩创建"一次"等行为,导致出现严重的性能问题。
本地
要解决此问题,请解压缩数据和日志文件。

详细信息,请参阅 在压缩卷上的 SQL Server 数据库的支持说明.

额外的数据点

PAGEIOLATCH_ * 和 writelog sys.dm_os_wait_stats 动态管理视图 (DMV) 等待是调查输入/输出路径性能的关键指标。如果您看到巨大的 PAGEIOLATCH 等待,这意味着 SQL Server 正在等待的 I/O 子系统。一定量的 PAGEIOLATCH 等待是典型和预期的行为。但是,如果 PAGEIOLATCH 的等待时间的平均值一直大于 10 毫秒 (ms),您应该调查 I/O 子系统处于压力下的原因。有关详细信息,请参阅以下文档:



SQL Server 要求系统支持"有保证的交付到稳定的媒体"下所述 SQL Server I/O 可靠性程序要求.有关 SQL Server 数据库引擎的输入和输出要求的详细信息,请转到下面的 Microsoft 知识库文章:

IO 833 EventID

警告:本文已自动翻译

属性

文章 ID:897284 - 上次审阅时间:10/01/2015 05:07:00 - 修订版本: 1.0

Microsoft SQL Server 2014 Business Intelligence, Microsoft SQL Server 2014 Developer, Microsoft SQL Server 2014 Enterprise, Microsoft SQL Server 2014 Enterprise Core, Microsoft SQL Server 2014 Express, Microsoft SQL Server 2014 Standard, Microsoft SQL Server 2014 Web, Microsoft SQL Server 2012 Developer, Microsoft SQL Server 2012 Enterprise, Microsoft SQL Server 2012 Enterprise Core, Microsoft SQL Server 2012 Express, Microsoft SQL Server 2012 Standard, Microsoft SQL Server 2012 Web, Microsoft SQL Server 2012 Business Intelligence, Microsoft SQL Server 2008 Developer, Microsoft SQL Server 2008 Enterprise, Microsoft SQL Server 2008 Express, Microsoft SQL Server 2008 Standard, Microsoft SQL Server 2008 R2 Datacenter, Microsoft SQL Server 2008 R2 Developer, Microsoft SQL Server 2008 R2 Enterprise, Microsoft SQL Server 2008 R2 Express, Microsoft SQL Server 2008 R2 Standard, Microsoft SQL Server 2008 R2 Web, Microsoft SQL Server 2008 R2 Workgroup, Microsoft SQL 2005 Server Workgroup, Microsoft SQL Server 2005 Standard Edition, Microsoft SQL Server 2005 Developer Edition, Microsoft SQL 2005 Server Enterprise

  • kbinfo kbtshoot kbsqlserv2000sp4fea kbmt KB897284 KbMtzh
反馈