sys.dm_broker_queue_monitors (Transact-SQL)

Gäller för:SQL Server

Returnerar en rad för varje kömonitor i instansen. En köövervakare hanterar aktivering för en kö.

Kolumnnamn Datatyp Nullbar Description
database_id int Yes Objektidentifierare för databasen som innehåller kön som monitorn följer.
queue_id int Yes Objektidentifierare för kön som monitorn följer.
state nvarchar(32) Yes Monitorns tillstånd. Detta värde är ett av följande alternativ:

INACTIVE
NOTIFIED
RECEIVES_OCCURRING
last_empty_rowset_time datetime Yes Senast gav en RECEIVE från kön ett tomt resultat.
last_activated_time datetime Yes Senast aktiverade denna kömonitor en lagrad procedur.
tasks_waiting int Yes Antal sessioner som för närvarande väntar inom en RECEIVE sats för denna kö.

Not: Detta värde inkluderar alla sessioner som utför ett mottagarkommando, oavsett om köövervakaren startade sessionen eller inte. Det är för när du använder WAITFOR tillsammans med RECEIVE. Med andra ord är dessa uppgifter att vänta på att meddelanden ska komma in i kön.

Permissions

SQL Server 2019 (15.x) och tidigare versioner kräver VIEW SERVER STATE behörighet på servern.

SQL Server 2022 (16.x) och senare versioner kräver VIEW SERVER PERFORMANCE STATE behörighet på servern.

Examples

A. Aktuell statusköövervakare

Detta scenario ger aktuell status för alla meddelandeköer.

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;