Partager via


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;