SQL Server 诊断信息来检测未报告的 I/O 问题,因为陈旧的读或写丢失的操作

错误 #: 470086 (SQL Server 8.0)

症状

如果丢失的操作系统、 驱动程序或硬件问题导致编写条件或陈旧的阅读的条件,您可能会看到数据完整性相关的错误消息,如第 605 错误 823,3448,3456。您可能会收到与以下示例类似的错误消息︰


2003-07-24 16:43:04.57 spid63 Getpage: bstat = 0x9、 sstat = 0x800,高速缓存
2003-07-24 16:43:04.57 spid63 pageno/应该是︰ objid/应为︰
2003-07-24 16:43:04.57 spid63 (1:7040966)/(1:7040966) 2093354622/2039782424

2003-07-24 16:43:04.57 spid63...IAM 表示该页面分配给此对象

2003-07-24 16:52:37.67 spid63 错误︰ 605,严重性︰ 21 日状态︰ 1
2003-07-24 16:52:37.67 spid63 尝试提取 pubs 所属对象不到对象 '标题' ' 作者' 的数据库中的逻辑页 (1:7040966).


2003-07-24 16:52:40.99 spid63 错误︰ 3448,严重性︰ 21 日状态︰ 1
2003-07-24 16:52:40.99 spid63 无法在页上 (1:7040977),数据库 pubs (数据库 ID 12) 的交易记录 id (0:159696956),撤消日志记录 (63361:16876:181)。页面信息︰ LSN = (63192:958360:10),类型 = 2。记录的信息︰ 操作码 = 2,上下文 1.


2003-07-09 14:31:35.92 spid66 错误︰ 823,严重程度︰ 24 日状态︰ 2
2003-07-09 14:31:35.92 spid66 (坏页 ID) 检测到 I/O 错误 0x00000016774000 h:\sql\MSSQL\data\tempdb.mdf 文件中的偏移量读取过程中.

2010-02-06 15:57:24.14 spid17s 错误︰ 3456,严重性︰ 21 日状态︰ 1。
2010-02-06 15:57:24.14 spid17s 无法在页上 (1:480946),数据库 'MyDatabase' (数据库 ID 17) 的交易记录 id (0:109000187),恢复日志记录 (58997:5252:28)。页面︰ LSN = (58997:5234:17),类型 = 3。日志︰ 操作码 = 2,5,上下文 PrevPageLSN: (58997:5243:17)。从数据库的备份中还原或修复数据库。

详细信息

Microsoft 推出从 SQL Server 2000 Service Pack 4 开始扩展的跟踪功能,这些诊断程序已经在 SQL Server 2005 及更高版本产品的一部分。这些功能可帮助检测 I/O 相关的外部问题和错误消息进行疑难解答"症状"一节中描述

如果您收到"症状"一节中提到的错误消息之一,他们无法解释的物理驱动器故障之类的然后查看 SQL Server、 操作系统、 驱动程序和硬件的任何已知的问题。诊断程序将尝试提供有关以下两种情况的信息︰

  • 失去写︰ 成功调用WriteFile API,但操作系统、 驱动程序或缓存控制器不会不正确地将数据刷新到物理媒体即使 SQL Server 通知写入成功。

  • 读取过时︰ 成功调用ReadFile API,但操作系统、 驱动程序或缓存控制器错误返回数据的旧版本。

例如,Microsoft 已经确认的WriteFile API 调用返回成功,但是相同的数据块的即时的成功读取返回较旧的数据,包括可能存储在硬件读缓存的数据。有时,由于读取的缓存问题发生此问题。在其他情况下,写入数据永远不会实际写入物理磁盘。

若要启用这些类型的问题的其他诊断程序,SQL Server 添加了跟踪标志 818。作为启动参数,可以指定跟踪标志 818-T818,正在运行 SQL Server,或者您的计算机可以运行下面的语句︰

DBCC TRACEON(818, -1)


跟踪标志 818 启用用于的跟踪成功的最后 2048 个写入操作所执行的运行 SQL Server,不包括排序和工作文件 i/o 操作的链接的计算机的内存中环形缓冲区。如错误 605、 823、 或 3448 错误发生时,会将传入缓冲区的日志序列号 (LSN) 值与最新写入列表进行比较。如果在读取操作过程中检索的 LSN 早于在写操作过程中指定的一个,在 SQL Server 错误日志中记录新的错误消息。大多数 SQL Server 写操作将作为检查点或延迟的写操作。惰性写入是使用异步 I/O 的后台任务。环形缓冲区的实现是轻量的从而使性能的影响可以忽略不计的系统。

下列消息表示 SQL Server 没有收到从WriteFile API 调用或ReadFile API 调用错误。但是,当 lsn,值的不正确︰


SQL Server 已检测未报告的 OS/硬件级别读取或写入数据库 12 页 (1:75007) 上的问题

LSN 返回 (63361:16876:181)、 LSN 预期 (63361:16876:500)

联系硬件供应商联系并考虑禁用缓存机制来解决问题


从 SQL Server 2005 开始,将作为报告的错误消息︰


SQL Server 检测到逻辑一致性基于 I/O 错误︰ 读取过时。发生在 << 读/写 >> << 物理偏移量 >> << 文件名 >> 文件中的偏移量处的数据库 id << DBID >> << PAGEID >> 页面的过程。在 SQL Server 错误日志或系统事件日志中的其他邮件可能提供更多详细信息。这是一个严重错误条件将威胁到数据库的完整性,必须立即纠正。填写完整的数据库一致性检查 (DBCC CHECKDB)。此错误可能导致由许多的因素;有关详细信息,请参阅 SQL Server 联机丛书。


此时,读的缓存包含较旧版本的页面,或者数据未正确写入物理磁盘。(写丢失或读取过时) 无论哪种情况,SQL Server 将报告操作系统、 驱动程序或硬件层外部问题。

如果尝试回滚事务,也没有错误 605 错误 823 时发生错误 3448,自动运行 SQL Server 的计算机关闭数据库,然后尝试打开并恢复数据库。遇到错误 605 或错误 823 的第一页将被视为损坏的页,并运行 SQL Server 的计算机保留的页面 id。(前恢复阶段中) 恢复过程时读取的页面错误 id 时,在 SQL Server 错误日志中记录的主详细信息的页面页眉。此操作很重要,因为它有助于区分丢失写入和读取过时的方案。

您可能会看到以下两个常见的行为中读取过时的方案︰
前面的段落中提到的行为表示读取缓存问题,他们经常通过禁用读的缓存得到解决。通常在前面的段落中概述的操作强制缓存失效,成功进行的读取显示的物理介质正确更新。读回页仍是旧版本的数据,即使强制刷新缓存机制时发生写丢失问题。

有时,问题可能不是特定于某个硬件缓存。它可能是筛选器驱动程序的问题。在这种情况下,检查您的软件,包括备份实用程序和防病毒软件,然后再查看是否有与该筛选器驱动程序的问题。

Microsoft 还注意到错误 605 或错误 823 不符合标准,但都由同一个读取过时或写丢失活动的条件。在某些情况下,页面显示要更新两次,但具有相同的 LSN 值。如果对象 ID和页 ID正确 (页已分配给该对象),并且在对页进行更改并将其转储到磁盘,则可能会出现此行为。下一个页检索返回较旧的映像,则进行第二次更改。SQL Server 事务日志显示页具有相同的 LSN 值更新两次。此操作就会有问题,当您尝试还原事务日志序列或存在数据一致性问题,如外键故障或缺少数据条目。下面的错误消息说明了这种情况的一个示例︰


错误︰ 3456,严重性︰ 21 日状态︰ 1 无法恢复日志记录 (276666:1664:19),用于在页上 (1:1787100) 的交易记录 ID (0:825853240),数据库作者 (7)。页面︰ LSN = (276658:4501:9),类型 = 1。日志︰ 操作码 = 4,上下文 2,PrevPageLSN: (275565:3959:31).


在下面的列表更详细地描述了某些情况︰

  • LSN SequenceAction1Checkpoint
    2Begin Transaction
    3Table created or truncated
    4Inserts (Pages allocated)
    5Newly allocated page written to disk by Lazy Writer
    6Select from table – Scans IAM chain, newly allocated page read back from disk (LRU | HASHED = 0x9 in getpage message), encounters Error 605 - Invalid Object ID
    7Rollback of transaction initiated

  • LSN SequenceAction1Checkpoint
    2Begin Transaction
    3Page Modification
    4Page written to disk by Lazy Writer
    5Page read in for another modification (stale image returned)
    6Page Modified for a second time but because of stale image does not see first modification
    7Rollback – Fails – Transaction Log shows two different log records with the same PREV LSN for the page

SQL Server '排序' 运算符执行 I/O 活动,主要对并从tempdb数据库。这些 I/O 操作是类似于缓冲区 I/O 操作;但是,对已设计为使用读取重试逻辑来尝试解决类似的问题。本文中介绍的附加诊断不应用于这些 I/O 操作。

Microsoft 已经注意到以下排序的根源读取失败通常是读取过时或写丢失︰


2003-04-01 20:13:31.38 spid122 SQL Server 断言︰ 文件︰ < p:\sql\ntdbms\storeng\drs\include\record.inl > 行 = 1447年失败肯定 = ' m_SizeRec > 0 & & m_SizeRec < = MAXDATAROW。

2003-03-29 09:51:41.12 spid57 排序读取失败 (损坏的页 ID)。pageid = (0x1:0x13e9)、 dbid = 2,文件 = e:\program 该 SQL Server\mssql\data\tempdb.mdf。正在重试。

2003-03-29 09:51:41.13 spid57 错误︰ 823,严重程度︰ 24 日状态︰ 7
0x000000027d2000 'e:\program 该 SQL Server\mssql\data\tempdb.mdf 文件中的偏移量读取过程中检测到 2003年-03-29 09:51:41.13 spid57 I/O 错误 (坏页 ID)。

* 00931097 Module(sqlservr+00531097) (utassert_fail + 000002E3)
* 005B1DA8 Module(sqlservr+001B1DA8) (RecBase::Resize+00000091)
* 00407EE7 Module(sqlservr+00007EE7) (RecBase::LocateColumn+00000012)
* 00852520 Module(sqlservr+00452520) (mergerow + 000000A4)
* 008522B3 Module(sqlservr+004522B3) (merge_getnext+00000285)
* 0085207D Module(sqlservr+0045207D) (mergenext+0000000D)
* 004FC5FB Module(sqlservr+000FC5FB) (getsorted+00000021)

通过将tempdb移到非缓存的本地驱动器,或禁用读取缓存机制,那些经历过这些排序错误的客户经常已经解决问题。

因为读取过时或写丢失会导致不需要的数据存储,则可能会出现各种不同的行为。它可能显示为丢失的数据,但一些丢失的数据的更常用效果显示为索引损坏,例如错误 644 或错误 625:


错误 644 严重性级别 21 消息文本找不到索引项 RID %。 * 索引页 %1 !,索引 ID %d 中的 hs 数据库 %。 * 1 !。

错误 625 严重性级别 21 消息文本无法从页 %1 检索行,因为开关 (%d) 是无效。


有些客户曾报告缺少行之后在执行行计数操作。出现此问题是由于写丢失。也许该页应当链接到聚簇的索引页链。如果写入操作发生物理丢失了,数据也会丢失。

重要:如果您遇到任何行为,或如果您是可疑的禁用缓存机制以及类似的问题,Microsoft 强烈建议您获取最新的更新 SQL Server 和最新的 SQL Server I/O 负载模拟器。Microsoft 还强烈建议您执行严格审查您的操作系统和其关联的配置。

注意:Microsoft 已经确认下罕见和繁重的 I/O 负载,某些硬件平台都可以返回读取过时。如果扩展的诊断表明可能过时丢失读取/编写条件、 请立即跟随您的硬件供应商联系上并使用SQLIOSim实用程序测试。

SQL Server 要求系统在SQL Server I/O 可靠性程序要求下所述支持稳定的媒体到有保证的传递。有关 SQL Server 数据库引擎的输入和输出要求的详细信息,请参阅Microsoft SQL Server 数据库引擎的输入/输出要求

下面是一些关于此问题的其他信息︰

  • 我作为 API 示例使用ReadFile和写文件。这种现象同样适用于散点图和收集活动。

  • 我们已经看到这些问题的几个最近 (2003 年 7 月) 在基于 Compaq/HP 系统智能 SCSI 和 HP SANsin 添加到英特尔基于 Raid 控制器。

  • 我们已经看到此问题在 SQL Server 2000 Service Pack 3 (760),更多和较高版本,但已经看到了在 SQL Server 2000 SP3 之前的类似方案。

  • SQLIOStress 已被更新为更积极的寻找这些条件。

  • SQL Server 开发人员正在更新其他实用程序有助于这些问题的检测中。

作者︰
编写器︰ haribaskar.janarthanam@wipro.com
技术审阅︰ bobward;mikezw;ericchr Srikant.Jahangirdar@wipro.com (KSM Id: Partners\v-9srikantj)
编辑器︰ v-sedmun;vernettp

需要更多帮助?

扩展你的技能
了解培训
抢先获得新功能
加入 Microsoft 内部人员

此信息是否有帮助?

谢谢您的反馈意见!

谢谢你的反馈! 可能需要转接到 Office 支持专员。

×