리소스 모니터는 SQL Server 실행하는 서버에서 비수익 조건을 입력합니다.

이 문서에서는 비수익 리소스 모니터에 대한 자세한 정보를 제공합니다.

원래 제품 버전: SQL Server
원래 KB 번호: 2216485

증상

Microsoft SQL Server 2008 이상 버전을 실행하는 서버에서 Resource Monitor 태스크는 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 내부입니다. 내부 이벤트에는 버퍼 풀의 알림이 포함되며 프로세스 전체입니다. 이러한 알림이 수신되면 다양한 메모리 소비자가 메모리 사용량을 다듬습니다.

참고

소비자는 캐시 저장소, 사용자 저장소 또는 개체 저장소인 메모리 클럭일 수 있습니다.

특정 메모리 소비자가 많은 양의 메모리를 사용하는 경우 소비자가 수행하는 트리밍을 준비하는 데 시간이 오래 걸릴 수 있습니다.

Scheduler Monitor 작업은 5초마다 실행됩니다. 일정 모니터는 지난 60초 동안 리소스 모니터가 한 소비자에서 다른 소비자로 이동했는지 여부를 확인합니다. Scheduler Monitor에서 리소스 모니터가 60초 동안 소비자를 지나치지 않았음을 감지하면 일정 모니터는 이 시나리오를 리소스 모니터가 비수익 상태로 전환한 것으로 해석합니다. 이 해석으로 인해 일정 모니터는 증상 섹션에 언급된 오류 메시지를 기록합니다.

참고

2019년 SQL Server 시작하여 60초 간격이 120초로 증가합니다. 이 증가는 이러한 진단 알림의 빈도를 줄입니다. 또한 메모리 덤프 파일의 생성을 줄입니다.

리소스 모니터에서 메모리를 해제하는 속도가 5초마다 2MB 미만인 경우에도 이러한 메시지가 발생합니다.

이러한 메시지는 리소스 모니터가 대규모 소비자를 정리하는 데 사용 중임을 나타내는 것일 뿐입니다. 이러한 메시지가 반드시 리소스 모니터 자체에 문제가 있는 것은 아닙니다.

해결 방법

다음 서비스 팩부터는 비수익 리소스 모니터 메시지가 확장되어 비수익 상태로 이어지는 메모리 클럭을 쉽게 격리합니다.

  • Microsoft SQL Server 2008의 서비스 팩 2
  • Microsoft SQL Server 2008 R2 서비스 팩 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초마다 2MB를 초과하지 않는 경우 Scheduler Monitor는 이 조건을 비수익 조건으로 검색합니다.

  • 마지막 대기: 이 필드는 리소스 모니터 스레드에 대한 마지막 대기 유형입니다. 필드와 함께 Approx CPU Used 이 필드를 사용할 수 있습니다. 이 필드 조합은 리소스 모니터 스레드가 실행 중인지 아니면 간격의 상당 부분을 기다리고 있는지를 식별할 수 있습니다.

  • 마지막 서기: 이 필드는 생성되지 않는 조건이 발생했을 때 메모리를 트리밍한 메모리 클럭의 형식 및 이름입니다.

  • 사용된 대략적 CPU: 이 필드는 리소스 모니터에서 밀리초 단위로 측정되는 커널 및 사용자 시간입니다. 이 필드를 다른 필드와 함께 사용하여 리소스 모니터가 지정된 간격 동안 진행 중인지 확인할 수 있습니다.

  • 간격: 이 필드는 마지막 서기가 밀리초 단위로 측정되었다는 알림을 받은 이후 경과된 시간입니다.

이 메시지를 사용하여 메모리 부족 알림의 원본을 식별할 수 있습니다. 메시지 시간부터 RING_BUFFER_RESOURCE_MONITOR 항목을 사용할 수도 있습니다.

리소스

RING_BUFFER_RESOURCE MONITOR를 해석하는 방법에 대한 자세한 내용은 다음 techcommunity 블로그 게시물을 참조하세요.

리소스 모니터 작업은 SQL Server 메모리 관련 성능 문제를 해결할 수 있습니다. SQL Server 메모리 알림을 수신 대기하고 응답합니다. 이러한 항목에 대한 자세한 내용은 다음 MSDN 블로그 문서를 참조하세요.