sys.dm_broker_queue_monitors (Transact-SQL)
針對執行個體中的每個佇列監視器,各傳回一個資料列。佇列監視器會管理佇列的啟動。
資料行名稱 |
資料類型 |
描述 |
---|---|---|
database_id |
int |
包含監視器所監看佇列之資料庫的物件識別碼。NULLABLE。 |
queue_id |
int |
監視器監看之佇列的物件識別碼。NULLABLE。 |
state |
nvarchar(32) |
監視器的狀態。NULLABLE。這是下列項目之一:
|
last_empty_rowset_time |
datetime |
上次佇列的 RECEIVE 傳回空結果的時間。NULLABLE。 |
last_activated_time |
datetime |
上次這個佇列監視器啟動預存程序的時間。NULLABLE。 |
tasks_waiting |
int |
目前 RECEIVE 陳述式中等候這個佇列的工作階段數目。NULLABLE。
附註
這個數目包括執行 RECEIVE 陳述式的任何工作階段,不管佇列監視器是否已起始工作階段。這個情況是配合 RECEIVE 使用 WAITFOR。基本上,這些工作會等候訊息到達佇列。
|
權限
需要伺服器的 VIEW SERVER 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() )