Delen via


sys.dm_broker_queue_monitors (Transact-SQL)

Van toepassing op:SQL Server

Geeft een rij terug voor elke wachtrijmonitor in de instantie. Een wachtrijmonitor beheert de activatie van een wachtrij.

Kolomnaam Gegevenstype Nullbaar Description
database_id int Yes Objectidentificatie voor de database die de wachtrij bevat die de monitor bekijkt.
queue_id int Yes Objectidentificatie voor de wachtrij die de monitor bekijkt.
state nvarchar(32) Yes Staat van de monitor. Deze waarde is een van de volgende opties:

INACTIVE
NOTIFIED
RECEIVES_OCCURRING
last_empty_rowset_time datetime Yes De laatste keer dat a RECEIVE uit de wachtrij een leeg resultaat terugleverde.
last_activated_time datetime Yes De laatste keer dat deze wachtrijmonitor een opgeslagen procedure activeerde.
tasks_waiting int Yes Aantal sessies dat momenteel wacht binnen een RECEIVE statement voor deze wachtrij.

Notitie: Deze waarde omvat elke sessie die een ontvangst-instructie uitvoert, ongeacht of de wachtrijmonitor de sessie is gestart. Het is voor wanneer je samen met RECEIVEgebruiktWAITFOR. Met andere woorden, deze taken wachten op berichten die in de wachtrij binnenkomen.

Permissions

SQL Server 2019 (15.x) en eerdere versies vereisen VIEW SERVER STATE machtiging op de server.

VOOR SQL Server 2022 (16.x) en latere versies is machtiging vereist VIEW SERVER PERFORMANCE STATE op de server.

Voorbeelden

Eén. Huidige status wachtrijmonitor

Dit scenario geeft de actuele status van alle berichtwachtrijen.

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;