文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

SQLServer 错误 701 系统内存不足,无法运行此查询。 故障 处理 修复 支持远程

2023-11-05 06:34

关注

详细信息

Attribute
产品名称 SQL Server
事件 ID 701
事件源 MSSQLSERVER
组件 SQLEngine
符号名称 NOSYSMEM
消息正文 系统内存不足,无法运行此查询。

注意

本文侧重介绍 SQL Server。 有关 Azure SQL 数据库中的内存不足问题的疑难解答,请参阅排查 Azure SQL 数据库的内存不足错误。

说明

当SQL Server未能分配足够的内存来运行查询时,会发生错误 701。 造成内存不足的因素可能有很多,包括操作系统设置、物理内存可用性、其他组件在 SQL Server 内使用内存或当前工作负荷存在内存限制。 大多数情况下,失败的事务不是引发此错误的原因。 总的来说,原因可以分为三类:

外部或操作系统内存压力

外部压力是指进程外部的组件的内存利用率较高,导致 SQL Server 内存不足。 必须查明系统上的其他应用程序是否正在消耗内存,导致内存可用性较低。 SQL Server 是设计用于通过减少内存使用量来应对操作系统内存压力的为数不多的应用程序之一。 这意味着,如果某个应用程序或驱动程序请求内存,操作系统将向所有应用程序发送一个释放内存的信号,SQL Server 将通过减少其自身的内存使用量来做出响应。 很少有其他应用程序做出响应,因为它们不用于侦听该通知。 因此,如果 SQL 开始减少其内存使用量,则其内存池也会减小,任何需要内存的组件都可能无法获取它。 你将开始收到 701 和其他与内存相关的错误。 有关详细信息,请参阅 SQL Server 内存体系结构

内部内存压力,不来自 SQL Server

内部内存压力是指由 SQL Server 进程内部的因素导致的低内存可用性。 SQL Server 进程内部运行的某些组件可能是 SQL Server 引擎的“外部”组件。 示例包括链接服务器、SQLCLR 组件、扩展过程 (XP) 和 OLE 自动化 (sp_OA*) 等 DLL。 其他示例包括防病毒或其他安全程序,它们将 DLL 注入进程中以用于监视目的。 这些组件中的任何组件出现问题或设计不佳都可能导致消耗大量内存。 例如,考虑链接服务器,该服务器将来自外部源的 2000 万行数据缓存到 SQL Server 内存中。 就 SQL Server 而言,内存分配器不会报告高内存使用率,但 SQL Server 进程内部消耗的内存将会很高。 例如,链接服务器 DLL 的此内存增长会导致 SQL Server 开始减少其内存使用量(见上文),并造成 SQL Server 内部的组件内存不足,从而导致类似 701 的错误。

内部内存压力,来自 SQL Server 组件

来自 SQL Server 引擎内部的组件的内部内存压力也可能导致错误 701。 有数百个组件在 SQL Server 中分配内存,这些组件通过内存分配器跟踪。 必须确定哪些内存分配器负责最大的内存分配,才能进一步解决此问题。 例如,如果发现 OBJECTSTORE_LOCK_MANAGER 内存分配器显示较大内存分配,则需要进一步了解锁管理器消耗如此多内存的原因。 你可能会发现,有些查询会获取大量的锁,请使用索引对其进行优化,或减少长时间持有锁的事务,或检查是否禁用了锁升级。 每个内存分配器或组件都有一种独特的方式来访问和使用内存。 有关详细信息,请参阅内存分配器类型及其说明。

用户操作

如果偶尔或者短暂出现错误 701,则可能存在可自行解决的短期内存问题。 在这些情况下,你可能不需要采取任何措施。 但是,如果错误在多个连接上多次出现,并且持续数秒或更长时间,请按照以下步骤进行进一步的故障排除。

下面的列表概述了有助于解决内存错误的一般步骤。

诊断工具和捕获

允许收集故障排除数据的诊断工具包括性能监视器、sys.dm_os_memory_clerks 和 DBCC MEMORYSTATUS 。

使用性能监视器配置和收集以下计数器:

在受影响的 SQL Server 上收集此查询的定期输出

SELECT pages_kb, type, name, virtual_memory_committed_kb, awe_allocated_kb
FROM sys.dm_os_memory_clerks
ORDER BY pages_kb DESC

Pssdiag 或 SQL LogScout

自动捕获这些数据点的另一种方式是使用 PSSDIAG 或 SQL LogScout 等工具。

以下各部分介绍了每种方案(外部或内部内存压力)的更详细步骤。

外部压力:诊断和解决方案

内部内存压力,不来自 SQL Server:诊断和解决方案

若要诊断 SQL Server 内部的模块 (DLL) 导致的内部内存压力,请使用以下方法:

SQL Server 引擎的内部内存使用:诊断和解决方案

可能使内存可用的快速缓解措施

以下操作可能会释放一些内存并将其提供给SQL Server:

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯