Partilhar via


sys.dm_broker_queue_monitors (Transact-SQL)

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. NULLABLE.

queue_id

int

Identificador de objeto da fila que o monitor inspeciona. NULLABLE.

state

nvarchar(32)

Estado do monitor. NULLABLE. É um dos seguintes:

  • INACTIVE

  • NOTIFIED

  • RECEIVES_OCCURRING

last_empty_rowset_time

datetime

Última vez em que um RECEIVE da fila retornou um resultado vazio. NULLABLE.

last_activated_time

datetime

Última vez em que este monitor de fila ativou um procedimento armazenado. NULLABLE.

tasks_waiting

int

Número de sessões que estão aguardando dentro de uma instrução RECEIVE por esta fila no momento. NULLABLE.

ObservaçãoObservação
Esse número inclui qualquer sessão que está executando um instrução de recebimento, independentemente do monitor de fila ter iniciado a sessão. Isso ocorre se você usar WAITFOR junto com RECEIVE. Basicamente, essas tarefas estão esperando que mensagens cheguem à fila.

Permissões

Requer a permissão VIEW SERVER STATE no servidor.

Exemplos

A. Monitor de fila de status atual

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

SELECT t1.name AS [Service_Name],  t3.name AS [Schema_Name],  t2.name AS [Queue_Name],  
CASE WHEN t4.state IS NULL THEN 'Not available' 
ELSE t4.state 
END AS [Queue_State],  
CASE WHEN t4.tasks_waiting IS NULL THEN '--' 
ELSE CONVERT(VARCHAR, t4.tasks_waiting) 
END AS tasks_waiting, 
CASE WHEN t4.last_activated_time IS NULL THEN '--' 
ELSE CONVERT(varchar, t4.last_activated_time) 
END AS last_activated_time ,  
CASE WHEN t4.last_empty_rowset_time IS NULL THEN '--' 
ELSE CONVERT(varchar,t4.last_empty_rowset_time) 
END AS last_empty_rowset_time, 
( 
SELECT COUNT(*) 
FROM sys.transmission_queue t6 
WHERE (t6.from_service_name = t1.name) ) AS [Tran_Message_Count] 
FROM sys.services t1    INNER JOIN sys.service_queues t2 
ON ( t1.service_queue_id = t2.object_id )   
INNER JOIN sys.schemas t3 ON ( t2.schema_id = t3.schema_id )  
LEFT OUTER JOIN sys.dm_broker_queue_monitors t4 
ON ( t2.object_id = t4.queue_id  AND t4.database_id = DB_ID() )  
INNER JOIN sys.databases t5 ON ( t5.database_id = DB_ID() )