sys.dm_broker_queue_monitors (Transact-SQL)
適用於:SQL Server
傳回 實例中每個佇列監視器的數據列。 佇列監視器會管理佇列的啟用。
資料行名稱 | 資料類型 | 描述 |
---|---|---|
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。注意: 不論佇列監視器是否啟動工作階段,這個數位都包含任何執行接收語句的會話。 這適用於搭配 使用 WAITFOR RECEIVE 時。 換句話說,這些工作正在等候訊息抵達佇列。 |
權限
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;