sys.dm_broker_queue_monitors(Transact-SQL)

적용 대상:SQL Server

인스턴스의 각 큐 모니터에 대한 행을 반환합니다. 큐 모니터는 큐에 대한 활성화를 관리합니다.

열 이름 데이터 형식 설명
database_id int 모니터에서 감시하는 큐를 포함하는 데이터베이스의 개체 식별자입니다. Nullable.
queue_id int 모니터가 감시하는 큐의 개체 식별자입니다. Nullable.
state nvarchar(32) 모니터의 상태입니다. Nullable. 다음 중 하나일 수 있습니다.

비활성

알림을

RECEIVES_OCCURRING
last_empty_rowset_time datetime 큐에서 RECEIVE가 마지막으로 빈 결과를 반환한 시간입니다. Nullable.
last_activated_time datetime 이 큐 모니터가 저장 프로시저를 마지막으로 활성화한 시간입니다. Nullable.
tasks_waiting int 현재 이 큐에 대한 RECEIVE 문 내에서 대기 중인 세션 수입니다. Nullable.

참고: 이 번호에는 큐 모니터가 세션을 시작했는지 여부에 관계없이 수신 문을 실행하는 모든 세션이 포함됩니다. 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)