摘要:本文探讨了 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 错误日志中:
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 请求的检测和报告是两个不同的操作。
检测(记录)是在 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 请求已经被延迟。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器