sys.dm_xtp_gc_queue_stats (Transact-SQL)

Applies to: SQL Server Azure SQL Database Azure SQL Managed Instance

Outputs information about each garbage collection worker queue on the server, and various statistics about each. There is one queue per logical CPU.

The main garbage collection thread (the Idle thread) tracks updated, deleted, and inserted rows for all transactions completed since the last invocation of the main garbage collection thread. When the garbage collection thread wakes, it determines if the timestamp of the oldest active transaction has changed. If the oldest active transaction has changed, then the idle thread enqueues work items (in chunks of 16 rows) for transactions whose write sets are no longer needed. For example, if you delete 1,024 rows, you will eventually see 64 garbage collection work items queued, each containing 16 deleted rows. After a user transaction commits, it selects all enqueued items on its scheduler. If there are no enqueued items on its scheduler, the user transaction will search on any queue in the current NUMA node.

You can determine if garbage collection is freeing memory for deleted rows by executing sys.dm_xtp_gc_queue_stats to see if the enqueued work is being processed. If entries in the current_queue_depth are not being processed or if no new work items are being added to the current_queue_depth, this is an indication that garbage collection is not freeing memory. For example, garbage collection can't be done if there is a long running transaction.

For more information, see In-Memory OLTP (In-Memory Optimization).

Column name Type Description
queue_id int The unique identifier of the queue.
total_enqueues bigint The total number of garbage collection work items enqueued to this queue since the server started.
total_dequeues bigint The total number of garbage collection work items dequeued from this queue since the server started.
current_queue_depth bigint The current number of garbage collection work items present on this queue. This item may imply one or more to be garbage collected.
maximum_queue_depth bigint The maximum depth this queue has seen.
last_service_ticks bigint CPU ticks at the time the queue was last serviced.


Requires VIEW SERVER STATE permission.

Permissions for SQL Server 2022 and later

Requires VIEW SERVER PERFORMANCE STATE permission on the server.

User Scenario

This output shows that SQL Server is either running on 4 cores or SQL Server instance has been affinitized to 4 cores:

This output shows that there are no work items in the queues to process. For queue 0, the total work items de-queued since SQL Startup are 15625 and the max queue depth has been 15625.

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  

See also

Memory-Optimized Table Dynamic Management Views (Transact-SQL)