SQL Server-Resource Monitor worker appears to be non-yielding on Node 0

Refer to https://support.microsoft.com/it-it/help/2216485/fix-resource-monitor-enters-a-non-yielding-condition-on-a-server-that?spid=1044&sid=1229%3Fspid%3D1044&sid=1229

Cause

In SQL Server 2008 and SQL Server 2008 R2, the Resource Monitor task wakes up periodically to listen to and notify subscribers of low, high, or steady memory events. These memory events may be external to SQL Server (notifications that are system-wide from the operating system) or internal to SQL Server (notifications that are process-wide from the buffer pool). When such notifications occur, various memory consumers trim their memory usage.

Note Consumers can be memory clerks that are cache stores, user stores, or object stores.

If certain memory consumers use a large amount of memory, the trimming that the consumers perform may take a long time to finish.

The Scheduler Monitor task that runs every five seconds checks whether Resource Monitor has moved from one consumer to another in the past 60 seconds. When the Scheduler Monitor detects that the Resource Monitor has not moved past a consumer for 60 seconds, the Schedule Monitor interprets this as the Resource Monitor entering a non-yielding state, and then the Schedule Monitor logs the error message that is mentioned in the "Symptoms" section.

These messages are also raised if the rate at which the Resource Monitor frees memory is less than 2 MB every five seconds.

These messages are only an indication that the Resource Monitor is busy cleaning up large consumers, and these messages do not necessarily indicate a problem with the Resource Monitor itself.

Resolution

Starting with Microsoft SQL Server 2008 Service Pack 2 and Microsoft SQL Server 2008 R2 Service Pack 1, the non-yielding Resource Monitor message was extended to easily isolate the memory clerk that leads to the non-yielding condition.

The new message will resemble the following:

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.

The following are descriptions of the various fields that are used in this message:

  • Memory freed: This is how much memory is freed by Resource Monitor for the specified interval as measured in kilobytes. If the rate at which the memory is freed does not exceed 2 MB every five seconds, the Scheduler Monitor detects this condition as a non-yielding condition.
  • Last wait: This is the last wait type for the Resource Monitor thread. You can use this field together with theApprox CPU Used field to identify whether the Resource Monitor thread is running or waiting for a significant part of the interval.
  • Last clerk: This is the type and name of the memory clerk that was trimming its memory when the non-yielding condition occurred.
  • Approx CPU Used: This is the kernel and user time that is used by Resource Monitor as measured in milliseconds. You can use this together with other fields to verify that Resource Monitor is making progress during the specified interval.
  • Interval: This is the time that elapsed since the last clerk was notified as measured in milliseconds.

You can use this message in addition to the RING_BUFFER_RESOURCE_MONITOR entries from the time of the message to identify the source of the low memory notification.

For more information about how to interpret the RING_BUFFER_RESOURCE MONITOR. visit the following MSDN blog:

How It Works: What are the RING_BUFFER_RESOURCE_MONITOR telling me?

For more information about how SQL Server listens and responds to memory notifications and about the Resource Monitor task and troubleshooting memory-related performance issues in SQL Server, refer to the following MSDN blog articles:

时间: 2024-10-15 00:22:10

SQL Server-Resource Monitor worker appears to be non-yielding on Node 0的相关文章

Microsoft SQL Server Version List(SQL Server 版本)

原帖地址 What version of SQL Server do I have? This unofficial build chart lists all of the known Service Packs (SP), Cumulative Updates (CU), patches, hotfixes and other builds of MS SQL Server 2014, 2012, 2008 R2, 2008, 2005, 2000, 7.0, 6.5 and 6.0 tha

非常全面的SQL Server巡检脚本来自sqlskills团队的Glenn Berry 大牛

-- SQL Server 2012 Diagnostic Information Queries -- Glenn Berry -- April 2015 -- Last Modified: April 27, 2015 -- http://sqlserverperformance.wordpress.com/ -- http://sqlskills.com/blogs/glenn/ -- Twitter: GlennAlanBerry -- Please listen to my Plura

SQL Server FullCheck

-- ----------------------------------------------------------------------------------- -- --1. 数据库 ----------------------------------------------------------------------------------- -- --1.查看数据库版本信息 select @@version --2.查看所有数据库名称及大小 exec sp_helpdb -

Configure Always On Availability Group for SQL Server on Ubuntu

下面简单介绍一下如何在Ubuntu上一步一步创建一个SQL Server AG(Always On Availability Group),以及配置过程中遇到的坑的填充方法. 目前在Linux上可以搭建两种类型的SQL Server AG,一种是高可用性的结构同时使用Cluster服务器提供业务连续性.这种结构包括read-scale节点.接下来就会介绍这种AG的搭建方法.另外一种是没有Cluster服务的read-scale AG,这种结构仅仅提供只读的可扩展性,不提供高可用性功能.关于如何创

Configure Red Hat Enterprise Linux shared disk cluster for SQL Server

下面一步一步介绍一下如何在Red Hat Enterprise Linux系统上为SQL Server配置共享磁盘集群(Shared Disk Cluster)及其相关使用(仅供测试学习之用,基础篇) 一.      创建共享磁盘和 Cluster 微软官方配置文档:https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-shared-disk-cluster-red-hat-7-configure. Linux Cluster结构

Configure Red Hat Enterprise Linux shared disk cluster for SQL Server——RHEL上的“类”SQL Server Cluster功能

下面一步一步介绍一下如何在Red Hat Enterprise Linux系统上为SQL Server配置共享磁盘集群(Shared Disk Cluster)及其相关使用(仅供测试学习之用,基础篇) 一.      创建共享磁盘和 Cluster 微软官方配置文档:https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-shared-disk-cluster-red-hat-7-configure. Linux Cluster结构

50种方法优化SQL Server数据库查询(转载)

原文地址:http://www.cnblogs.com/zhycyq/articles/2636748.html 查询速度慢的原因很多,常见如下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. 4.内存不足 5.网络速度慢 6.查询出的数据量过大(可以采用多次查询,其他的方法降低数据量) 7.锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷) 8.sp_lock,sp_who,活动的用

提高SQL Server数据库效率常用方法

1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. 4.内存不足 5.网络速度慢 6.查询出的数据量过大(可以采用多次查询,其他的方法降低数据量) 7.锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷) 8.sp_lock,sp_who,活动的用户查看,原因是读写竞争资源. 9.返回了不必要的行和列 10.查询语句不好,没有优化 ●可以通过如下方法来优化查询 : 1.把数据.日志.索引放到不同的

Configure Always On Availability Group for SQL Server on RHEL——Red Hat Enterprise Linux上配置SQL Server Always On Availability Group

下面简单介绍一下如何在Red Hat Enterprise Linux上一步一步创建一个SQL Server AG(Always On Availability Group),以及配置过程中遇到的坑的填充方法. 之前发表过一篇类似的文章是Configure Always On Availability Group for SQL Server on Ubuntu——Ubuntu上配置SQL Server Always On Availability Group,有对Ubuntu感兴趣的请看那一篇