sys.dm_broker_queue_monitors (Transact-SQL)

Aplica-se: SQL Server

Retorna uma linha para cada monitor de fila na instância. Um monitor de fila gerencia a ativação de uma fila.

Nome da coluna Tipo de dados Descrição
database_id int Identificador de objeto do banco de dados que contém a fila que o monitor inspeciona. Anulável.
queue_id int Identificador de objeto da fila que o monitor inspeciona. Anulável.
state nvarchar(32) Estado do monitor. Anulável. Esse valor é uma das seguintes opções:

INACTIVE
NOTIFIED
RECEIVES_OCCURRING
last_empty_rowset_time datetime Da última vez que a RECEIVE da fila retornou um resultado vazio. Anulável.
last_activated_time datetime Última vez em que este monitor de fila ativou um procedimento armazenado. Anulável.
tasks_waiting int Número de sessões que estão aguardando atualmente em uma RECEIVE instrução para essa fila. Anulável.

Nota: Esse número inclui qualquer sessão que executa uma instrução de recebimento, independentemente de o monitor de fila ter iniciado a sessão. Isso é para quando você usa WAITFOR junto com RECEIVE. Em outras palavras, essas tarefas estão aguardando a chegada das mensagens na fila.

Permissões

O SQL Server 2019 (15.x) e versões anteriores exigem VIEW SERVER STATE permissão no servidor.

O SQL Server 2022 (16.x) e versões posteriores exigem VIEW SERVER PERFORMANCE STATE permissão no servidor.

Exemplos

R. Monitor de fila de status atual

Esse cenário fornece o status atual de todas as filas de mensagens.

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;