sys.dm_broker_queue_monitors (Transact-SQL)
S'applique à : SQL Server
Retourne une ligne pour chaque moniteur de file d'attente de l'instance. Un moniteur de file d'attente gère l'activation pour une file d'attente.
Nom de la colonne | Type de données | Description |
---|---|---|
database_id |
int | Identificateur d'objet de la base de données qui contient la file d'attente surveillée par le moniteur. Autorise la valeur Null. |
queue_id |
int | Identificateur d'objet de la file d'attente surveillée par le moniteur. Autorise la valeur Null. |
state |
nvarchar(32) | État du moniteur. Autorise la valeur Null. Cette valeur est l’une des options suivantes :INACTIVE NOTIFIED RECEIVES_OCCURRING |
last_empty_rowset_time |
datetime | Dernière fois qu’une RECEIVE file d’attente a retourné un résultat vide. Autorise la valeur Null. |
last_activated_time |
datetime | Horodatage de la dernière activation d'une procédure stockée par ce moniteur de file d'attente. Autorise la valeur Null. |
tasks_waiting |
int | Nombre de sessions actuellement en attente dans une RECEIVE instruction pour cette file d’attente. Autorise la valeur Null.Remarque : ce nombre inclut une session exécutant une instruction de réception, que le moniteur de file d’attente ait démarré la session. C’est pour cela que vous utilisez WAITFOR avec RECEIVE . En d’autres termes, ces tâches attendent que les messages arrivent dans la file d’attente. |
autorisations
SQL Server 2019 (15.x) et les versions antérieures nécessitent VIEW SERVER STATE
une autorisation sur le serveur.
SQL Server 2022 (16.x) et versions ultérieures nécessitent VIEW SERVER PERFORMANCE STATE
une autorisation sur le serveur.
Exemples
R. Moniteur d'état des files d'attente
Ce scénario fournit le statut actuel de toutes les files d'attente de messages.
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;