sys.dm_broker_queue_monitors (Transact-SQL)
適用於:SQL Server
傳回 實例中每個佇列監視器的數據列。 佇列監視器會管理佇列的啟用。
資料行名稱 | 資料類型 | 描述 |
---|---|---|
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)