sys.dm_broker_queue_monitors (Transact-SQL)

適用対象:SQL Server

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

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

INACTIVE

NOTIFIED

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

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

アクセス許可

サーバーに対する VIEW SERVER STATE 権限が必要です。

SQL Server 2022 以降のアクセス許可

サーバーに対する VIEW SERVER PERFORMANCE STATE 権限が必要です。

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

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

SELECT t1.name AS [Service_Name],  t3.name AS [Schema_Name],  t2.name AS [Queue_Name],    
CASE WHEN t4.state IS NULL THEN 'Not available'   
ELSE t4.state   
END AS [Queue_State],    
CASE WHEN t4.tasks_waiting IS NULL THEN '--'   
ELSE CONVERT(VARCHAR, t4.tasks_waiting)   
END AS tasks_waiting,   
CASE WHEN t4.last_activated_time IS NULL THEN '--'   
ELSE CONVERT(varchar, t4.last_activated_time)   
END AS last_activated_time ,    
CASE WHEN t4.last_empty_rowset_time IS NULL THEN '--'   
ELSE CONVERT(varchar,t4.last_empty_rowset_time)   
END AS last_empty_rowset_time,   
(   
SELECT COUNT(*)   
FROM sys.transmission_queue t6   
WHERE (t6.from_service_name = t1.name) ) AS [Tran_Message_Count]   
FROM sys.services t1    INNER JOIN sys.service_queues t2   
ON ( t1.service_queue_id = t2.object_id )     
INNER JOIN sys.schemas t3 ON ( t2.schema_id = t3.schema_id )    
LEFT OUTER JOIN sys.dm_broker_queue_monitors t4   
ON ( t2.object_id = t4.queue_id  AND t4.database_id = DB_ID() )    
INNER JOIN sys.databases t5 ON ( t5.database_id = DB_ID() );  

参照

動的管理ビューと動的管理関数 (Transact-SQL)
Service Broker 関連の動的管理ビュー (Transact-SQL)