Solucionando problemas de prioridades de conversação

Este tópico fornece sugestões para corrigir sintomas comuns relacionados às prioridades de conversação do Service Broker.

Técnica: Determinando se HONOR_BROKER_PRIORITY está ON.

Use a coluna sys.databasesis_broker_priority_honored para determinar o estado da opção de banco de dados 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;

Sintoma: as mensagens não são enviadas em seqüência de prioridade

Abra um rastreamento SQL Server Profiler e analise os eventos de confirmação de mensagens remotas do Agente. Um valor de 1 na coluna StarvationElevation indica que a prioridade das mensagens foi elevada para evitar privação. Um valor de 0 na coluna HonorBokerPriority indica que a opção HONOR_BROKER_PRIORITY não estava habilitada no banco de dados de envio.

Também analise o contador de Monitor de Sistema de Transporte Agente/DBM para ver as taxas de transmissão para mensagens de diferentes níveis de prioridade.

Sintoma: as mensagens não são recebidas em seqüência de prioridade

Uma instrução RECEIVE só recupera mensagens de um grupo de conversação. Ela não receberá mensagens de conversações de alta prioridade caso pertençam a um grupo diferente de conversação.

Uma instrução RECEIVE que não tem uma cláusula WHERE recupera mensagens do grupo de conversação desbloqueado de prioridade mais alta. Se o grupo de conversação tiver uma mistura de conversações de baixa e alta prioridade, a instrução RECEIVE poderá recuperar mensagens de conversações de baixa prioridade. Isso pode ocorrer mesmo que a fila contenha mensagens de conversações de alta prioridade em outros grupos.

Uma instrução RECEIVE com uma cláusula WHERE que especifica um grupo de conversação recupera apenas mensagens do grupo de conversação especificado. A instrução RECEIVE recupera mensagens de conversações de baixa prioridade no grupo, independentemente do nível de prioridade das mensagens de outros grupos de conversação.

Sintoma: as mensagens não recebem o nível de prioridade esperado

Exiba sys.conversation_endpoint para verificar se o ponto de extremidade de conversação recebeu o nível de prioridade esperado. Se não, use sys.conversation_priorites para analisar as propriedades especificadas nas prioridades de conversação do banco de dados no contrato, no serviço local e no serviço remoto usado no ponto de extremidade de conversação.