好学IT学院:IT信息技术分享交流平台
来源:【转自www.bitsCN.com】  作者:佚名  发布时间:2008-10-23  ★★★加入收藏〗〖手机版
摘要:摘要:本文探讨了SQLServer2005ServicePack4中的报告工具如何显著减少为识别和确定延迟和阻塞I/O操作的根源所花费的时间。…

摘要:本文探讨了 SQL Server 2005 Service Pack 4 中的报告工具如何显著减少为识别和确定延迟和阻塞 I/O 操作的根源所花费的时间。

简介

像 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 错误日志中: 网管联盟bitsCN_com

2004-11-11 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 请求的检测和报告是两个不同的操作。网管联盟bitsCN_com

检测(记录)是在 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 请求已经被延迟。

网管u家u.bitscn@com

性能和计划操作

总体系统性能可能在 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 功能,并且猛烈地扩展磁盘队列长度,因此上述性能计数器具有较高的值本身并不表明存在问题。

利用 C# 实现任务栏通知窗口
  想必大部分网友都使用过QQ、MSN等聊天程序,它们的界面都相当华丽,尤其是当网友上线以及消息提示时会有一个浮动的窗体从屏幕的右下方…
  • 好学触屏公众号虎力全开、杨帆起航!
  • 四大名著全套小学生版注音版
  • 诗词中的科学全4册
  • 曹文轩系列儿童文学全套画本