대화 우선 순위 문제 해결

이 항목에서는 Service Broker 대화 우선 순위와 관련된 일반적인 문제를 해결하기 위한 제안 사항을 제공합니다.

방법: HONOR_BROKER_PRIORITY가 ON인지 확인

sys.databasesis_broker_priority_honored 열을 사용하여 HONOR_BROKER_PRIORITY 데이터베이스 옵션의 상태를 확인합니다.

SELECT name AS database_name,
       CASE is_broker_priority_honored
            WHEN 0 THEN N'OFF'
            WHEN 1 THEN N'ON'
       END AS is_broker_priority_honored
FROM sys.databases
ORDER BY database_name;

증상: 메시지가 우선 순위 순서에 따라 전송되지 않는다

SQL Server 프로파일러 추적을 열고 Broker Remote Message Ack 이벤트를 검토합니다. StarvationElevation 열의 값 1은 메시지의 우선 순위가 고갈 방지를 위해 승격되었음을 나타냅니다. HonorBokerPriority 열의 값 0은 보내는 데이터베이스에 HONOR_BROKER_PRIORITY 옵션이 설정되지 않았음을 나타냅니다.

또한 Broker/DBM Transport System Monitor 카운터를 검토하여 여러 우선 순위 수준의 메시지에 대한 전송 속도를 확인합니다.

증상: 메시지가 우선 순위 순서에 따라 수신되지 않는다

RECEIVE 문은 하나의 대화 그룹에서만 메시지를 검색하고, 메시지가 다른 대화 그룹에 속해 있을 경우 우선 순위가 높은 대화에서 이러한 메시지를 수신하지 않습니다.

WHERE 절이 없는 RECEIVE 문은 잠금이 해제되어 있고 우선 순위가 가장 높은 대화 그룹에서 메시지를 검색합니다. 대화 그룹에 높은 우선 순위 대화와 낮은 우선 순위 대화가 함께 있으면 RECEIVE 문이 낮은 우선 순위 대화에서 메시지를 검색할 수 있습니다. 이 문제는 다른 그룹에 있는 높은 우선 순위 대화에서 가져온 메시지가 큐에 경우에도 발생할 수 있습니다.

WHERE 절이 있는 RECEIVE 문은 대화 그룹이 지정된 대화 그룹에서만 메시지를 검색하도록 지정합니다. RECEIVE 문은 다른 대화 그룹에 있는 메시지의 우선 순위 수준에 관계없이 해당 그룹에 있는 낮은 우선 순위 대화에서 메시지를 검색합니다.

증상: 메시지에 예상 우선 순위 수준이 할당되지 않는다

sys.conversation_endpoint를 검토하여 대화 끝점에 예상 우선 순위 수준이 할당되었는지 확인합니다. 대화 끝점에 예상 우선 순위 수준이 할당되지 않은 경우 sys.conversation_priorites를 사용하여 데이터베이스에 있는 대화 우선 순위에 지정된 속성을 대화 끝점에 사용되는 계약, 로컬 서비스 및 원격 서비스에 대해 검토합니다.