次の方法で共有


sys.dm_broker_queue_monitors (Transact-SQL)

適用対象: SQL サーバー

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

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

不活発な

通知

RECEIVES_OCCURRING
last_empty_rowset_time datetime キューからの RECEIVE が最後に空の結果を返した時刻。 許容。
last_activated_time datetime キュー モニターによってストアド プロシージャがアクティブ化された前回の時刻。 許容。
tasks_waiting int このキューの 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)