Freigeben über


sys.dm_broker_queue_monitors (Transact-SQL)

Gilt für: SQL Server

Gibt eine Zeile für jede Warteschlangenüberwachung in der Instanz zurück. Eine Warteschlangenüberwachung verwaltet die Aktivierung einer Warteschlange.

Spaltenname Datentyp BESCHREIBUNG
database_id int Objekt-ID für die Datenbank mit der Warteschlange, die überwacht wird. NULL-Werte sind zulässig.
queue_id int Objekt-ID der überwachten Warteschlange. NULL-Werte sind zulässig.
state nvarchar(32) Status des Überwachungsservers. NULL-Werte sind zulässig. Dieser Wert ist eine der folgenden Optionen:

INACTIVE
NOTIFIED
RECEIVES_OCCURRING
last_empty_rowset_time datetime Das letzte Mal, dass eine RECEIVE aus der Warteschlange ein leeres Ergebnis zurückgegeben hat. NULL-Werte sind zulässig.
last_activated_time datetime Zeitpunkt, zu dem die Warteschlangenüberwachung zuletzt eine gespeicherte Prozedur aktiviert hat. NULL-Werte sind zulässig.
tasks_waiting int Anzahl der Sitzungen, die derzeit in einer RECEIVE Anweisung für diese Warteschlange warten. NULL-Werte sind zulässig.

Hinweis: Diese Zahl enthält jede Sitzung, die eine Empfangs-Anweisung ausführt, unabhängig davon, ob der Warteschlangenmonitor die Sitzung gestartet hat. Dies ist der Fall, wenn Sie WAITFOR zusammen mit RECEIVE. Mit anderen Worten, diese Aufgaben warten darauf, dass Nachrichten in der Warteschlange ankommen.

Berechtigungen

SQL Server 2019 (15.x) und frühere Versionen erfordern VIEW SERVER STATE berechtigungen auf dem Server.

SQL Server 2022 (16.x) und höhere Versionen erfordern VIEW SERVER PERFORMANCE STATE berechtigungen auf dem Server.

Beispiele

A. Aktueller Status der Warteschlangen

In diesem Szenario wird der aktuelle Status aller Nachrichtenwarteschlangen wiedergegeben.

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;