Solucionar problemas de prioridades de conversa

Aplica-se a:SQL ServerInstância Gerenciada de SQL do Azure

Este artigo fornece sugestões para corrigir sintomas comuns relacionados às prioridades de conversa do Service Broker.

Técnica: determinar se HONOR_BROKER_PRIORITY está ON

Use a sys.databasesis_broker_priority_honored coluna para determinar o estado da opção HONOR_BROKER_PRIORITY de banco de dados:

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 na sequência de prioridade

Abra um rastreamento do SQL Server Profiler e examine os eventos Broker:Remote Message Ack . Um valor de 1 na StarvationElevation coluna indica que a prioridade das mensagens foi elevada para evitar a fome. Um valor de 0 na HonorBrokerPriority coluna 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 na sequência de prioridade

Uma RECEIVE instrução recupera apenas mensagens de um grupo de conversa. Ele não receberá mensagens de conversas de alta prioridade se pertencerem a um grupo de conversa diferente.

Uma RECEIVE instrução que não tem uma WHERE cláusula recupera mensagens do grupo de conversa desbloqueado de prioridade mais alta. Se o grupo de conversa tiver uma combinação de conversas de alta prioridade e de baixa prioridade, a RECEIVE instrução poderá recuperar mensagens das conversas de baixa prioridade. Esse cenário pode ocorrer mesmo se a fila tiver mensagens de conversas de alta prioridade em outros grupos.

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

Sintoma: as mensagens não são atribuídas ao nível de prioridade esperado

Veja sys.conversation_endpoint se o ponto de extremidade da conversa recebeu o nível de prioridade esperado. Caso contrário, use sys.conversation_priorities para examinar as propriedades especificadas para as prioridades de conversa no banco de dados em relação ao contrato, serviço local e serviço remoto que é usado para o ponto de extremidade de conversa.