sys.dm_broker_queue_monitors (Transact-SQL)
对于实例中的每个队列监视器,相应地返回一行。队列监视器负责管理队列的激活。
列名  | 
数据类型  | 
说明  | 
|---|---|---|
database_id  | 
int  | 
数据库的对象标识符,该数据库包含了监视器所观察的队列。可以为 Null。  | 
queue_id  | 
int  | 
监视器所观察的队列的对象标识符。可以为 Null。  | 
state  | 
nvarchar(32)  | 
监视器的状态。可以为 Null。可为下列值之一: 
  | 
last_empty_rowset_time  | 
datetime  | 
来自队列的 RECEIVE 上次返回空结果时的时间。可以为 Null。  | 
last_activated_time  | 
datetime  | 
此队列监视器上次激活存储过程时的时间。可以为 Null。  | 
tasks_waiting  | 
int  | 
当前正在 RECEIVE 语句中等待此队列的会话数。可以为 Null。  注意
此数字包括任何执行接收语句的会话,不管队列监视器是否启动了该会话。它表示您是否与 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() )
注意