Compartir a través de


sys.dm_broker_queue_monitors (Transact-SQL)

Se aplica a: SQL Server

Devuelve una fila por cada monitor de cola en la instancia. Un monitor de cola administra la activación de una cola.

Nombre de la columna Tipo de datos Descripción
database_id int Identificador del objeto de la base de datos que contiene la cola que supervisa el monitor. Acepta valores NULL.
queue_id int Identificador del objeto de la cola que supervisa el monitor. Acepta valores NULL.
state nvarchar(32) Estado del monitor. Acepta valores NULL. Este valor es una de las siguientes opciones:

INACTIVE
NOTIFIED
RECEIVES_OCCURRING
last_empty_rowset_time datetime La última vez que un RECEIVE elemento de la cola devolvió un resultado vacío. Acepta valores NULL.
last_activated_time datetime Última vez que este monitor de cola activó un procedimiento almacenado. Acepta valores NULL.
tasks_waiting int Número de sesiones que están esperando actualmente dentro de una RECEIVE instrucción para esta cola. Acepta valores NULL.

Nota: Este número incluye cualquier sesión que ejecute una instrucción receive, independientemente de si el monitor de cola inició la sesión. Esto es para cuando se usa WAITFOR junto con RECEIVE. En otras palabras, estas tareas están esperando que los mensajes lleguen a la cola.

Permisos

SQL Server 2019 (15.x) y versiones anteriores requieren VIEW SERVER STATE permiso en el servidor.

SQL Server 2022 (16.x) y versiones posteriores requieren VIEW SERVER PERFORMANCE STATE permiso en el servidor.

Ejemplos

A Estado actual del monitor de cola

Este escenario proporciona el estado actual de todas las colas de mensajes.

SELECT DB_NAME() AS [Database_Name],
       s.[name] AS [Service_Name],
       sch.[name] AS [Schema_Name],
       q.[name] AS [Queue_Name],
       ISNULL(m.[state], N'Not available') AS [Queue_State],
       m.tasks_waiting,
       m.last_activated_time,
       m.last_empty_rowset_time,
       (SELECT COUNT(1)
        FROM sys.transmission_queue AS t6
        WHERE t6.from_service_name = s.[name]) AS Tran_Message_Count
FROM sys.services AS s
     INNER JOIN sys.databases AS d
         ON d.database_id = DB_ID()
     INNER JOIN sys.service_queues AS q
         ON s.service_queue_id = q.[object_id]
     INNER JOIN sys.schemas AS sch
         ON q.[schema_id] = sch.[schema_id]
     LEFT OUTER JOIN sys.dm_broker_queue_monitors AS m
         ON q.[object_id] = m.queue_id
        AND m.database_id = d.database_id;