Поделиться через


Устранение неполадок с приоритетами диалогов

В этом разделе приведены рекомендации по исправлению стандартных неполадок, связанных с приоритетами диалогов Service Broker.

Метод: определить, установлено ли для параметра HONOR_BROKER_PRIORITY значение ON

При помощи столбца is_broker_priority_honored представления sys.databases определите состояние параметра базы данных 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 Profiler и просмотрите события Broker Remote Message Ack. Значение 1 в столбце StarvationElevation указывает на то, что приоритет сообщений был поднят для предотвращения их нехватки. Значение 0 в столбце HonorBokerPriority означает, что параметр HONOR_BROKER_PRIORITY не был включен в передающей базе данных.

Также просмотрите счетчик системного монитора Broker/DBM Transport, чтобы проверить скорости передачи сообщений с различными уровнями приоритетов.

Симптом: сообщения не принимаются в приоритетной последовательности

Инструкция RECEIVE получает сообщения только из одной группы сообщений. Она не принимает сообщения из диалогов с высоким приоритетом, если они принадлежат другой группе сообщений.

Инструкция RECEIVE, не содержащая предложения WHERE, получает сообщения из разблокированной группы сообщений с наивысшим приоритетом. Если группа сообщений содержит диалоги как с высоким, так и с низким приоритетом, инструкция RECEIVE может получать сообщения из диалогов с низким приоритетом. Это может случиться, даже если в очереди есть сообщения из высокоприоритетных диалогов других групп.

Инструкция RECEIVE, содержащая предложение WHERE с указанием группы сообщений, получает сообщения только из указанной группы. Инструкция RECEIVE получает сообщения из низкоприоритетных диалогов группы независимо от уровня приоритета сообщений из других групп.

Симптом: сообщениям не назначается ожидаемый уровень приоритета

Просмотрите представление sys.conversation_endpoint, чтобы проверить, назначен ли конечной точке диалога ожидаемый уровень приоритета. Если нет, при помощи представления sys.conversation_priorites просмотрите свойства, указанные для приоритетов диалогов в базе данных относительно контракта, локальной службы и удаленной службы, используемой в качестве конечной точки диалога.