sys.dm_broker_queue_monitors (Transact-SQL)

Применимо к:SQL Server

Возвращает по одной строке для каждого монитора очереди в экземпляре. Монитор очереди управляет активацией очереди.

Имя столбца Тип данных Описание:
database_id int Идентификатор объекта для базы данных, содержащей очередь, за которой следит монитор. Допускает значение NULL.
queue_id int Идентификатор объекта для очереди, за которой следит монитор. Допускает значение NULL.
state nvarchar(32) Состояние монитора. Допускает значение NULL. Возможны следующие варианты.

НЕАКТИВНЫЕ

УВЕДОМЛЕНИЯ

RECEIVES_OCCURRING
last_empty_rowset_time datetime Последний раз, когда инструкция RECEIVE из очереди возвратила пустой результат. Допускает значение NULL.
last_activated_time datetime Последний раз, когда монитор очереди активировал хранимую процедуру. Допускает значение NULL.
tasks_waiting int Количество сеансов, ожидающих в инструкции RECEIVE для этой очереди. Допускает значение NULL.

Примечание. Это число включает в себя любой сеанс, выполняющий инструкцию получения, независимо от того, запущен ли монитор очереди сеанса. Это происходит, если вместе с RECEIVE используется инструкция WAITFOR. В основном, эти задачи ожидают прибытия сообщений в очередь.

Разрешения

необходимо разрешение VIEW SERVER STATE на сервере.

Разрешения для SQL Server 2022 и более поздних версий

Требуется разрешение VIEW SERVER PERFORMANCE STATE на сервере.

Примеры

О. Монитор текущего состояния очереди

Этот сценарий предоставляет сведения о текущем состоянии всех очередей сообщений.

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() );  

См. также

Динамические административные представления и функции (Transact-SQL)
Связанные динамические административные представления Service Broker (Transact-SQL)