サーバー上の各ガベージ コレクション ワーカー キューに関する情報およびそれぞれに関する各種統計を出力します。 論理 CPU ごとに 1 つのキューが存在します。
ガベージ コレクションのメイン スレッド (アイドル スレッド) は、ガベージ コレクションのメイン スレッドが前回呼び出されてから完了したすべてのトランザクションについて、更新、削除、および挿入された行を追跡します。 ガベージ コレクション スレッドは、起動すると、最も古いアクティブなトランザクションのタイムスタンプが変化しているかどうかを判断します。 最も古いアクティブなトランザクションが変化した場合は、アイドル スレッドにより、書き込みセットが不要になったトランザクションの作業項目が (16 行ごとのチャンクで) エンキューされます。 たとえば、1,024 行を削除すると、64 のガベージ コレクション作業項目がエンキューされます (1 つの作業項目には削除された 16 行が含まれています)。 ユーザー トランザクションがコミットされると、スケジューラでエンキューされたすべての項目が選択されます。 スケジューラにエンキューされた項目がない場合、ユーザー トランザクションは、現在の NUMA ノードでキューを検索します。
sys.dm_xtp_gc_queue_stats を実行してエンキューされた作業が処理されているかどうかを確認することにより、削除された行についてガベージ コレクションでメモリが解放されるかどうかを確認できます。 current_queue_depth のエントリが処理されていない場合または current_queue_length に追加される新しい作業項目がない場合は、ガベージ コレクションでメモリが解放されていないことを示します。 たとえば、実行時間が長いトランザクションが存在する場合、ガベージ コレクションは実行できません。
詳細については、「インメモリ OLTP (インメモリ最適化)」を参照してください。
適用対象: SQL Server (SQL Server 2014 から現在のバージョンまで) |
列名 |
型 |
説明 |
|---|---|---|
queue_id |
int |
キューの一意の識別子。 |
total_enqueues |
bigint |
サーバーが起動してからこのキューにエンキューされたガベージ コレクションの作業項目の総数。 |
total_dequeues |
bigint |
サーバーが起動してからこのキューからデキューされたガベージ コレクションの作業項目の総数。 |
current_queue_depth |
bigint |
現在このキューにあるガベージ コレクションの作業項目の数。 このアイテムは場合によっては 1 つ以上がガベージ コレクションの対象であることを示します。 |
maximum_queue_depth |
bigint |
このキューに同時に存在した最大項目数。 |
last_service_ticks |
bigint |
キューが最後に処理された時点における CPU のティック。 |
権限
VIEW SERVER STATE 権限が必要です。
ユーザー シナリオ
この出力は、SQL Server が 4 コアで実行中か、または、SQL Server インスタンスが 4 コアに関連付けられていることを示しています。
この出力は、処理する作業項目がキューにないことを示しています。 キュー 0 の場合、SQL の起動後、キューから削除された作業項目が合計 15625 で、キューの最大項目数は 215625 に設定されています。
queue_id total_enqueues total_dequeues current_queue_depth maximum_queue_depth last_service_ticks
----------------------------------------------------------------------------------------------------
0 15625 15625 0 15625 1233573168347
1 15625 15625 0 15625 1234123295566
2 15625 15625 0 15625 1233569418146
3 15625 15625 0 15625 1233571605761