Sdílet prostřednictvím


sys.dm_broker_queue_monitors (Transact-SQL)

platí pro:SQL Server

Vrátí řádek pro každý monitor fronty v instanci. Frontový monitor spravuje aktivaci fronty.

Název sloupce Datový typ Nullovatelný Description
database_id int Ano Identifikátor objektu pro databázi, která obsahuje frontu, kterou monitor sleduje.
queue_id int Ano Identifikátor objektu fronty, kterou monitor sleduje.
state nvarchar(32) Ano Stav monitoru. Tato hodnota je jednou z následujících možností:

INACTIVE
NOTIFIED
RECEIVES_OCCURRING
last_empty_rowset_time datetime Ano Minule se RECEIVE z fronty vrátil prázdný výsledek.
last_activated_time datetime Ano Minule tento monitor fronty aktivoval uloženou proceduru.
tasks_waiting int Ano Počet relací, které momentálně čekají v rámci příkazu RECEIVE pro tuto frontu.

Poznámka: Tato hodnota zahrnuje jakoukoli relaci, která vykonává příkaz přijímout, bez ohledu na to, zda monitor fronty relaci zahájil. Je to pro případ, WAITFOR kdy používáte spolu s RECEIVE. Jinými slovy, tyto úkoly čekají na doručení zpráv do fronty.

Povolení

SQL Server 2019 (15.x) a starší verze vyžadují oprávnění VIEW SERVER STATE na serveru.

SQL Server 2022 (16.x) a novější verze vyžadují VIEW SERVER PERFORMANCE STATE oprávnění k serveru.

Examples

A. Monitor fronty aktuálního stavu

Tento scénář poskytuje aktuální stav všech front.

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;