INF: SQL Server 可能会显示内存损坏和恢复错误

概要

Microsoft SQL Server 在 SQL Server 错误日志中可能会显示以下消息之一︰

854︰ 机器支持内存错误恢复。已启用 SQL 内存保护,从内存损坏中进行恢复。


为 856: SQL Server 中已检测到硬件内存损坏数据库 '%1 !' ' 文件 ID: %u,页标识;%u、 内存地址︰ 0x %i64x 和已成功恢复页面。


855︰ 无法纠正的硬件检测到的内存损坏。您的系统可能会变得不稳定。请检查 Windows 事件日志以了解更多详细信息。

详细信息

有较新的硬件,并且运行的 Windows Server 2012 或更高版本,硬件可以通知操作系统和应用程序的内存的计算机上 (操作系统页) 的页面标记为损坏或损坏。应用程序,例如 SQL Server 可以通过使用以下 API 集注册这些坏的内存页通知︰

  • GetMemoryErrorHandlingCapabilities

  • RegisterBadMemoryNotification

  • BadMemoryCallbackRoutine

SQL Server 在 Microsoft SQL Server 2012年及更高版本中添加对这些通知的支持。在 SQL Server 启动时,SQL Server 会检查硬件是否支持这一新功能。此外,错误日志中收到以下消息︰

2014-05-04 10:06:01.54 服务器计算机支持内存错误恢复。已启用 SQL 内存保护,从内存损坏中进行恢复。


目前,仅缓冲池中执行操作,当 SQL Server 收到这些通知。当接收到通知时,SQL Server 必须循环访问整个缓冲池,并找出每个分配的缓冲区的地址。然后,SQL Server 使用QueryWorkingSetEX API 来检查是否任何备份数据页的内存页被标记为坏。此内存页面对应的 PSAPI_WORKING_SET_EX_BLOCK 输出结构都设置为 1,则为其成员错误损坏报告。

如果该缓冲区池或数据页当前未更改或无法处理的 I/O,SQL Server 可以放弃,并消除重复提交的数据页。然后,SQL Server 将记录以下消息︰

SQL Server 中已检测到硬件内存损坏数据库 '%1 !' ' 文件 ID: %u,页标识;%u、 内存地址︰ 0x %i64x 和已成功恢复页面。


当查询再次要求该数据页时,缓冲池可以后从磁盘中读取的数据页,并将恢复到缓冲池中的内容。还有可能的页处于损坏状态的磁盘上的版本。在这种情况下,SQL Server 可能会记录其它的错误,例如错误 824。

如果不通过缓冲池,但某些缓存的对象或结构使用损坏的页,则 SQL Server 将记录以下消息︰

检测到无法纠正的硬件内存损坏。您的系统可能会变得不稳定。请检查 Windows 事件日志以了解更多详细信息。


如果服务器报告内存错误,应与计算机硬件供应商联系,并执行相应的操作,如执行内存诊断程序、 BIOS 和固件更新和更换坏内存模块。

下面的两个扩展的事件可使用 SQL Server 2012年开始。它们被称作是固定或识别为已损坏但不能固定每个页。



您可以使用 SQL Server 跟踪标志 849 防止 SQL Server 内存错误通知操作系统注册。但是,请注意跟踪标志 849 将从操作系统接收坏内存通知中禁用 SQL Server。因此,我们不建议使用此跟踪标记在典型情况下。

另外,请注意,默认情况下,SQL Server 将收到这些通知在受支持的硬件上。

您还需要了解当 SQL Server 注册这些内存错误通知,惰性写入器系统过程不执行页上常检查。关于固定页检查的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章︰

2015759如何解决 SQL Server 中的 Msg 832 (常网页进行过更改)

需要更多帮助?

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

此信息是否有帮助?

谢谢您的反馈意见!

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

×