次の方法で共有


sys.dm_broker_queue_monitors (Transact-SQL)

適用対象: SQL Server

インスタンス内のキュー モニターごとに 1 行のデータを返します。 キュー モニターは、キューのアクティブ化を管理します。

列名 データ型 説明
database_id int モニターが監視するキューを含むデータベースのオブジェクト識別子。 Null 許容。
queue_id int モニターが監視するキューのオブジェクト識別子。 Null 許容。
state nvarchar(32) モニターの状態。 Null 許容。 この値は、次のいずれかのオプションです。

INACTIVE
NOTIFIED
RECEIVES_OCCURRING
last_empty_rowset_time datetime キューから RECEIVE が最後に空の結果を返した時刻。 Null 許容。
last_activated_time datetime キュー モニターによってストアド プロシージャがアクティブ化された前回の時刻。 Null 許容。
tasks_waiting int このキューの RECEIVE ステートメント内で現在待機しているセッションの数。 Null 許容。

注: この数には、キュー モニターがセッションを開始したかどうかに関係なく、receive ステートメントを実行するすべてのセッションが含まれます。 これは、RECEIVEと一緒にWAITFORを使用する場合に使用します。 言い換えると、これらのタスクはメッセージがキューに到着するのを待機しています。

アクセス許可

SQL Server 2019 (15.x) 以前のバージョンでは、サーバーに対する VIEW SERVER STATE アクセス許可が必要です。

SQL Server 2022 (16.x) 以降のバージョンでは、サーバーに対する VIEW SERVER PERFORMANCE STATE アクセス許可が必要です。

A. 現在の状態キュー モニター

このシナリオでは、すべてのメッセージ キューの現在の状態が提供されます。

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;