You have multiple accounts
Choose the account you want to sign in with.

症状

请考虑以下情况:

  • 安装微软 SQL Server 2008 或微软 SQL Server 2005。

  • 安装 SQL Server 的计算机具有 64 个以上逻辑处理器。

  • 启用非统一内存访问 (NUMA)。

在这种情况下,您遇到影响性能或内存使用的问题。例如,您遇到以下一个或多个问题:

  • SQL Server 错误日志中可能记录了类似于以下一项的错误消息:

    错误消息 1

    2013-07-17 05:10:31.02 服务器 IO 完成侦听器 (0x27a0) 工作人员 0x00000000516A41A0 在节点 3 上显示为非屈服。已用约 CPU:内核 0 毫秒,用户 14991 ms,间隔:15001

    错误消息 2

    2013-07-17 05:15:02.83 spid707 在等待缓冲器闩锁时发生超时 - 类型 4, bp 00000000000000, 页 1:6908, 统计 0x35c0000b, 数据库 ID: 4, 分配单位 ID: 72057594041860096, 任务 0x0000005166D048 : 0, 等待时间 300, 标志 0x1aa 拥有任务 0x000000005C4F4C8。不要继续等待。

    错误消息 3

    2013-07-17 05:44:18.71 spid690 错误: 701, 严重性: 17, 状态: 42.2013-07-17 05:44:18.71 spid690 资源池中没有足够的系统内存"默认"运行此查询。

  • SQL Server 停止响应用户查询。

  • 在受影响的 SQL Server 安装中,内存使用量出现无法解释的增长。

  • 由 LazyWriter 后台线程执行的操作不会按预期完成。例如,以下操作可能无法完成:

    • 当前时间戳未更新。因此,所有数据库页具有相同的时间戳,并且 LazyWriter 线程无法逐出任何缓冲区。

    • 性能监视器 (Perfmon.exe) 中的缓冲池计数器不会更新,并且可能始终显示"0"(零)。

    • 无法动态更改最小内存和最大内存服务器设置。

    • 长时间运行的输入/输出检测无法按预期工作。

    • 缓冲池不会切换到内存稳定状态,并且它保留"离开"缓冲区。

原因

由于 SQL Server 2008 和 SQL Server 2005 不是处理器组(K 组设置)知道的,因此可能会出现这些问题。在 NUMA 节点 0 上创建的主要 LazyWriter 线程负责许多与 SQL Server 内存管理器相关的内务管理活动。但是,如果进程在处理器组上运行,则 LazyWriter 线程可能无法启动,该处理器组是具有 64 个以上逻辑处理器且配置了 NUMA 的计算机中的第一组。备注内存不足 (OOM) 消息是常见的,当通常由懒人线程执行的内务管理活动不发生。即使有足够的可用可用内存,也可能发生此问题。这可能会导致"不生成 IOCP 侦听器"错误、闩锁超时和其他问题。

解决方案

SQL Server 2008

要在 SQL Server 2008 中解决此问题,请下载并安装 Microsoft SQL Server 2008 服务包 3 (SP3)。要获取下载包,以及有关 SQL Server 2008 SP3 的更多信息,请访问以下 Microsoft 下载中心网站:

SQL Server 2008 服务包 3

解决方法

SQL 服务器 2008 和 SQL Server 2005

要解决 SQL Server 2008 和 SQL Server 2005 中的此问题,请禁用 NUMA。要禁用 NUMA,请启用 SQL Server 服务启动时的跟踪标志 8015。备注禁用 NUMA 后,可以使用系统中的所有处理器。但是,性能可能不太理想,因为所有处理器都将有单个 LazyWriter/IOCP 侦听器。

SQL Server 2005

为了在 SQL Server 2005 中解决此问题,我们建议您将操作系统可用的处理器数限制为 64。要限制可用处理器的数量,请按照以下步骤操作:

  1. 单击"开始", 单击"运行",键入"msconfig",然后单击"确定"。

  2. 在"系统配置实用程序"对话框中,单击"BOOT"。INI选项卡。

  3. 在BOOT上。INI选项卡,单击"高级选项"。

  4. 在BOOT中。INI 高级选项对话框,选择/NUMPROC+复选框。

  5. /NUMPROC®复选框旁边的列表中,选择小于或等于 64 的值,然后单击"确定"。

  6. 在"系统配置实用程序"对话框中,单击"确定"。

  7. 重新启动服务器。

参考

有关 SQL Server 2008 SP3 中修复的问题的详细信息,包括"原因"部分中描述的 NUMA 问题,请单击文章编号以查看 Microsoft 知识库中的文章:

2546951 SQL Server 2008 服务包 3 修复的问题列表有关如何将 SQL Server 或 SQL Server 代理分配给处理器组的信息,请转到以下 MSDN 网站:

将 SQL 服务器、SQL 代理分配给处理器组(OOM、挂起、性能计数器对于缓冲池始终为零,...)有关 NUMA 配置的详细信息,请访问以下 MSDN 网站:

SQL 服务器:澄清 NUMA 配置信息有关国外页面的 NUMA 配置的信息,访问以下 MSDN 网站:

工作原理:SQL Server 2008 NUMA 和国外页面

需要更多帮助?

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

此信息是否有帮助?

你对语言质量的满意程度如何?
哪些因素影响了你的体验?

谢谢您的反馈!

×