sys.dm_broker_queue_monitors(Transact-SQL)
적용 대상: SQL Server
인스턴스의 각 큐 모니터에 대한 행을 반환합니다. 큐 모니터는 큐에 대한 활성화를 관리합니다.
열 이름 | 데이터 형식 | 설명 |
---|---|---|
database_id |
int | 모니터에서 감시하는 큐를 포함하는 데이터베이스의 개체 식별자입니다. Nullable. |
queue_id |
int | 모니터가 감시하는 큐의 개체 식별자입니다. Nullable. |
state |
nvarchar(32) | 모니터의 상태입니다. Nullable. 이 값은 다음 옵션 중 하나입니다.INACTIVE NOTIFIED RECEIVES_OCCURRING |
last_empty_rowset_time |
날짜/시간 | RECEIVE 큐에서 마지막으로 빈 결과를 반환했습니다. Nullable. |
last_activated_time |
날짜/시간 | 이 큐 모니터가 저장 프로시저를 마지막으로 활성화한 시간입니다. Nullable. |
tasks_waiting |
int | 이 큐에 대한 문 내에서 RECEIVE 현재 대기 중인 세션 수입니다. Nullable.참고: 이 번호에는 큐 모니터가 세션을 시작했는지 여부에 관계없이 수신 문을 실행하는 모든 세션이 포함됩니다. 와 함께 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;