sys.dm_xtp_gc_queue_stats(Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Microsoft Fabric 中的 SQL 数据库

输出有关服务器上每个垃圾回收工作线程队列的信息,以及有关每个队列的各种统计信息。 每个逻辑 CPU 有一个队列。

主垃圾回收线程(空闲线程)针对自上次调用主垃圾回收线程以来完成的所有事务跟踪已更新、删除和插入的行。 垃圾回收线程唤醒时,它会确定最早活动事务的时间戳是否已更改。 如果最早活动事务已更改,则空闲线程会针对不再需要写入集的事务,将工作项(16 行为一个块区)排入队列。 例如,如果您删除 1,024 行,则最终将看到 64 个垃圾回收工作项排队,每个工作项都包含 16 个已删除行。 用户事务提交之后,它选择其计划程序上的所有排队项。 如果其计划程序上没有排队项,则用户事务会搜索当前 NUMA 节点中的任何队列。

您可以通过执行 sys.dm_xtp_gc_queue_stats 以查看是否在处理排队工作,确定垃圾回收是否在为已删除行释放内存。 如果未处理current_queue_depth中的条目,或者未将新的工作项添加到current_queue_depth,则表明垃圾回收不会释放内存。 例如,如果存在长时间运行的事务,则无法执行垃圾回收。

有关详细信息,请参阅 内存中 OLTP(内存中优化)

列名称 类型 描述
queue_id int 队列的唯一标识符。
total_enqueues bigint 自启动服务器以来排入此队列的垃圾回收工作项的总数。
total_dequeues bigint 自启动服务器以来离开此队列的垃圾回收工作项的总数。
current_queue_depth bigint 此队列中现有的垃圾回收工作项的当前数量。 此项可能意味着要对一个或多个项进行垃圾回收。
maximum_queue_depth bigint 此队列已显示的最大深度。
last_service_ticks bigint 上次服务队列时的 CPU 时钟周期。

权限

需要 VIEW SERVER STATE 权限 。

SQL Server 2022 及更高版本的权限

要求对服务器具有 VIEW SERVER PERFORMANCE STATE 权限。

使用方案

此输出显示 SQL Server 在 4 个核心上运行,或者 SQL Server 实例已关联到 4 个核心:

此输出显示,要处理的队列中没有工作项。 对于队列 0,自 SQL 启动为 15625 以来取消排队的工作项总数,最大队列深度为 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  

另请参阅

内存优化表动态管理视图 (Transact-SQL)