Aracılığıyla paylaş


sys.dm_broker_queue_monitors (Transact-SQL)

Şunlar için geçerlidir: SQL Server

Örnekteki her kuyruk monitörü için bir satır döndürür. Bir kuyruk monitörü, bir kuyruğun aktivasyonunu yönetir.

Sütun adı Veri türü Null olabilir Description
database_id int Yes Monitörün izlediği kuyruğu içeren veritabanı için nesne tanımlayıcısı.
queue_id int Yes Monitörün izlediği kuyruk için nesne tanımlayıcısı.
state nvarchar(32) Yes Monitörün durumu. Bu değer aşağıdaki seçeneklerden biridir:

INACTIVE
NOTIFIED
RECEIVES_OCCURRING
last_empty_rowset_time datetime Yes En son kuyruktan bir RECEIVE kişi boş sonuç vermişti.
last_activated_time datetime Yes Bu kuyruk monitörü son seferinde saklanan bir prosedür etkinleştirilmişti.
tasks_waiting int Yes Bu kuyruk için şu anda bir RECEIVE ekstre içinde bekleyen oturum sayısı.

Not: Bu değer, kuyruk monitörünün oturumu başlatıp başlatmadığına bakılmaksızın, bir alım ifadesi yürüten herhangi bir oturumu kapsar. Birlikte kullandığınız WAITFORRECEIVEzamanlar için. Başka bir deyişle, bu görevler mesajların kuyruğuna gelmesini bekler.

Permissions

SQL Server 2019 (15.x) ve önceki sürümleri sunucuda VIEW SERVER STATE izin gerektirir.

SQL Server 2022 (16.x) ve sonraki sürümleri sunucuda izin gerektirir VIEW SERVER PERFORMANCE STATE .

Örnekler

A. Güncel durum kuyruk monitörü

Bu senaryo, tüm mesaj kuyruklarının mevcut durumunu sağlar.

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;