本文提供了有关非生成资源监视器的详细信息。
原始产品版本:SQL Server
原始 KB 数: 2216485
现象
在运行 Microsoft SQL Server 2008 或更高版本的服务器上,资源监视器任务每 5 秒记录以下消息:
Date_And_Time Server Using 'dbghelp.dll' version '4.0.5'
Date_And_TimeServer **Dump thread - spid = 0, PSS = 0x0000000000000
000, EC = 0x0000000000000000
Date_And_TimeLogon Login succeeded for user 'OPENTEXT\sqlcrmusr'. Connection: trusted. [CLIENT:
IP_Address]
Date_And_Timespid78 Error: 4014, Severity: 20, State: 2.
Date_And_Timespid78 A fatal error occurred while reading the input stream from the network. The session will be terminated.
Date_And_TimeServer ***Stack Dump being sent to Drive:\MSSQL2005\LOG\SQLDump####.txt
Date_And_TimeServer * *******************************************************************************
Date_And_TimeServer *
Date_And_TimeServer * BEGIN STACK DUMP:
Date_And_TimeServer *
Date_And_Timespid 0
Date_And_TimeServer *
Date_And_TimeServer * Non-yielding Resource Monitor
Date_And_TimeServer *
Date_And_TimeServer * *******************************************************************************
Date_And_TimeServer * -------------------------------------------------------------------------------
Date_And_TimeServer * Short Stack Dump
Date_And_TimeServer Stack Signature for the dump is 0x000000000000005C
Date_And_Time,Server,Unknown,Resource Monitor (0x9b0) Worker 0x0000000003A2C1C0 appears to be non-yielding on
Node_#. Memory freed: 0 KB. Approx CPU Used: kernel 0 msnull user 0 msnull Interval:
Interval_value.
原因
资源监视器任务会定期唤醒,侦听分类为低、高或稳定的内存事件。 监视器在发生这些事件时通知事件订阅者。
这些内存事件可能位于 SQL Server 外部 。 外部事件包括来自操作系统的通知,并且是系统范围的通知。 其他事件在 SQL Server 内部 。 内部事件包括来自缓冲池的通知,并且是进程范围的。 收到此类通知时,各种内存使用者会剪裁其内存使用情况。
注意
使用者可以是缓存存储、用户存储或对象存储的内存职员。
如果某些内存使用者使用大量内存,则使用者执行的剪裁可能需要很长时间才能准备。
计划程序监视器任务每 5 秒运行一次。 计划监视器检查资源监视器在过去 60 秒内是否已从一个使用者移动到另一个使用者。 当计划程序监视器检测到资源监视器未超过使用者 60 秒时,计划监视器会将此方案解释为进入非生成状态的资源监视器。 此解释会导致计划监视器记录“症状”部分中提到的错误消息。
注意
从 SQL Server 2019 开始,60 秒间隔将增加到 120 秒。 这会增加这些诊断通知的频率。 它减少了内存转储文件的生成。
如果资源监视器每 5 秒释放内存的速率小于 2 MB,也会引发这些消息。
这些消息只是表明资源监视器正忙于清理大型使用者。 这些消息不一定表示资源监视器本身存在问题。
解决方法
从以下 Service Pack 开始,非生成资源监视器消息会扩展,以轻松隔离导致非生成条件的内存 clerk:
- Microsoft SQL Server 2008 的 Service Pack 2
- Microsoft SQL Server 2008 R2 的 Service Pack 1
新消息将类似于以下示例:
Resource Monitor (0x9b0) Worker 0x0000000003A2C1C0 appears to be non-yielding on Node Node_#. Memory freed: 0 KB. Last wait: > lastwaittype. Last clerk: type clerk_type, name clerk_name. Approx CPU Used: kernel 0 ms, user 0 ms, Interval: Interval_value.
以下是此消息中使用的各种字段的说明:
内存释放: 此字段是资源监视器为指定间隔释放内存的量。 它以千字节为单位。 如果释放内存的速率每 5 秒不超过 2 MB,计划程序监视器会将此条件检测为非生成条件。
最后等待: 此字段是资源监视器线程的最后一个等待类型。 可以将此字段与该字段结合使用
Approx CPU Used
。 此字段组合可以确定资源监视器线程是正在运行还是等待间隔的很大一部分。最后一个职员: 此字段是发生非生成条件时剪裁其内存的内存职员的类型和名称。
使用的大致 CPU: 此字段是资源监视器使用的内核和用户时间,以毫秒为单位。 可以将此字段与其他字段一起使用,以验证资源监视器是否在指定的时间间隔内正在进行。
间隔: 此字段是自上一个职员收到通知后经过的时间(以毫秒为单位)。
可以使用此消息标识低内存通知的源。 还可以从消息起使用RING_BUFFER_RESOURCE_MONITOR条目。
资源
有关如何解释 RING_BUFFER_RESOURCE MONITOR 的详细信息,请参阅以下技术豁免博客文章:
资源监视器任务可以排查 SQL Server 中与内存相关的性能问题。 SQL Server 侦听和响应内存通知。 有关这些项目的详细信息,请参阅以下 MSDN 博客文章: