Устранение неполадок с приоритетами диалогов
В этом разделе приведены рекомендации по исправлению стандартных неполадок, связанных с приоритетами диалогов 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 просмотрите свойства, указанные для приоритетов диалогов в базе данных относительно контракта, локальной службы и удаленной службы, используемой в качестве конечной точки диалога.
См. также