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;