sys.dm_xtp_gc_queue_stats (Transact-SQL)
适用于: SQL Server Azure SQL 数据库 Azure 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