リソース モニターは、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.

原因

Resource Monitor タスクは、低、高、または安定として分類されたメモリ イベントをリッスンするために定期的にウェイクアップします。 モニターは、これらのイベントが発生したときにイベント サブスクライバーに通知します。

これらのメモリ イベントは、SQL Serverの外部にある場合があります。 外部イベントには、オペレーティング システムからの通知が含まれており、システム全体です。 その他のイベントは、SQL Serverの内部イベントです。 内部イベントには、バッファー プールからの通知が含まれており、プロセス全体です。 このような通知を受信すると、さまざまなメモリ コンシューマーがメモリ使用量をトリミングします。

注:

コンシューマーには、キャッシュ ストア、ユーザー ストア、またはオブジェクト ストアであるメモリ クラークを指定できます。

特定のメモリ コンシューマーが大量のメモリを使用する場合、コンシューマーが実行するトリミングの準備に長い時間がかかる場合があります。

Scheduler Monitor タスクは 5 秒ごとに実行されます。 スケジュール モニターは、リソース モニターが過去 60 秒間にコンシューマー間で移動したかどうかを確認します。 スケジューラ モニターが、リソース モニターがコンシューマーを超えて 60 秒間移動していないことを検出すると、スケジュール モニターはこのシナリオをリソース モニターが非生成状態に入ると解釈します。 この解釈により、スケジュール モニターは、「現象」セクションに記載されているエラー メッセージをログに記録します。

注:

SQL Server 2019 以降では、60 秒間隔が 120 秒に増加します。 この増加により、これらの診断通知の頻度が減少します。 また、メモリ ダンプ ファイルの生成を減らします。

これらのメッセージは、リソース モニターがメモリを解放するレートが 5 秒ごとに 2 MB 未満の場合にも発生します。

これらのメッセージは、リソース モニターが大規模なコンシューマーのクリーンアップにビジーであることを示すだけです。 これらのメッセージは、必ずしもリソース モニター自体に問題があることを示しているわけではありません。

解決方法

次のサービス パック以降では、非生成リソース モニター メッセージが拡張され、非生成状態につながるメモリ クラークを簡単に分離できます。

  • 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.

このメッセージで使用されるさまざまなフィールドの説明を次に示します。

  • 解放されたメモリ: このフィールドは、指定された間隔で Resource Monitor によって解放されるメモリの量です。 これはキロバイト単位で測定されます。 メモリが解放されるレートが 5 秒ごとに 2 MB を超えない場合、スケジューラ モニターはこの条件を非生成条件として検出します。

  • 最後の待機: このフィールドは、リソース モニター スレッドの最後の待機の種類です。 このフィールドは、フィールドと Approx CPU Used 組み合わせて使用できます。 このフィールドの組み合わせは、Resource Monitor スレッドが実行されているか、間隔のかなりの部分を待機しているかを識別できます。

  • 最後の書記: このフィールドは、非生成条件が発生したときにメモリをトリミングしていたメモリ クラークの型と名前です。

  • 使用されるおおよその CPU: このフィールドは、リソース モニターで使用されるカーネルとユーザーの時間です (ミリ秒単位)。 このフィールドを他のフィールドと共に使用して、指定した間隔でリソース モニターが進行していることを確認できます。

  • 間隔: このフィールドは、最後の書記がミリ秒単位で通知されてから経過した時間です。

このメッセージを使用して、メモリ不足通知のソースを特定できます。 メッセージの時刻からRING_BUFFER_RESOURCE_MONITORエントリを使用することもできます。

リソース

RING_BUFFER_RESOURCE MONITOR の解釈方法の詳細については、次の techcommunity ブログ投稿を参照してください。

リソース モニター タスクでは、SQL Serverのメモリ関連のパフォーマンスの問題をトラブルシューティングできます。 SQL Serverは、メモリ通知をリッスンし、応答します。 これらの項目の詳細については、次の MSDN ブログ記事を参照してください。