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;