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 Pouvant être nul Description
database_id int Oui Identificateur d'objet de la base de données qui contient la file d'attente surveillée par le moniteur.
queue_id int Oui Identificateur d'objet de la file d'attente surveillée par le moniteur.
state nvarchar(32) Oui État du moniteur. Cette valeur est l’une des options suivantes :

INACTIVE
NOTIFIED
RECEIVES_OCCURRING
last_empty_rowset_time datetime Oui Dernière fois qu’une RECEIVE file d’attente a retourné un résultat vide.
last_activated_time datetime Oui Horodatage de la dernière activation d'une procédure stockée par ce moniteur de file d'attente.
tasks_waiting int Oui Nombre de sessions actuellement en attente dans une RECEIVE instruction pour cette file d’attente.

Note: Cette valeur inclut toute session exécutant une instruction de réception, que le moniteur de file d’attente ait commencé la session ou non. C’est pour quand vous utilisez WAITFOR ensemble 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;