13518219792

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

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

详细信息

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:

香港美国云服务器选创新互联,2H2G首月10元开通。
创新互联(www.cdcxhl.com)互联网服务提供商,拥有超过10年的服务器租用、服务器托管、云服务器、虚拟主机、网站系统开发经验。专业提供云主机、虚拟主机、域名注册、VPS主机、云服务器、香港云服务器、免备案服务器等。


本文题目:SQLServer错误701系统内存不足,无法运行此查询。故障处理修复支持远程
分享网址:http://cdbrznjsb.com/article/dpipshe.html

其他资讯

让你的专属顾问为你服务