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;