sys.dm_broker_queue_monitors (Transact-SQL)
Область применения: SQL Server
Возвращает по одной строке для каждого монитора очереди в экземпляре. Монитор очереди управляет активацией очереди.
Имя столбца | Тип данных | Description |
---|---|---|
database_id |
int | Идентификатор объекта для базы данных, содержащей очередь, за которой следит монитор. Допускает значение NULL. |
queue_id |
int | Идентификатор объекта для очереди, за которой следит монитор. Допускает значение NULL. |
state |
nvarchar(32) | Состояние монитора. Допускает значение NULL. Это значение является одним из следующих параметров:INACTIVE NOTIFIED RECEIVES_OCCURRING |
last_empty_rowset_time |
datetime | Последний раз, когда из RECEIVE очереди возвращается пустой результат. Допускает значение NULL. |
last_activated_time |
datetime | Последний раз, когда монитор очереди активировал хранимую процедуру. Допускает значение NULL. |
tasks_waiting |
int | Количество сеансов, ожидающих в данный момент в инструкции RECEIVE для этой очереди. Допускает значение NULL.Примечание. Это число включает в себя любой сеанс, выполняющий инструкцию получения, независимо от того, запущен ли монитор очереди сеанса. Это касается, если вы используете WAITFOR вместе с RECEIVE . Другими словами, эти задачи ожидают поступления сообщений в очередь. |
Разрешения
ДЛЯ SQL Server 2019 (15.x) и более ранних версий требуется VIEW SERVER STATE
разрешение на сервере.
ДЛЯ SQL Server 2022 (16.x) и более поздних версий требуется VIEW SERVER PERFORMANCE STATE
разрешение на сервере.
Примеры
А. Монитор текущего состояния очереди
Этот сценарий предоставляет сведения о текущем состоянии всех очередей сообщений.
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;