Compartir a través de


Solucionar problemas de prioridades de conversación

En este tema se proporcionan sugerencias para corregir síntomas comunes relacionados con las prioridades de las conversaciones de Service Broker.

Técnica: determinar si HONOR_BROKER_PRIORITY es ON

Utilice la columna is_broker_priority_honoredde sys.databases para determinar el estado de la opción de base de datos 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;

Síntoma: los mensajes no se envían en la secuencia de la prioridad

Abra un seguimiento de SQL Server Profiler y revise los eventos de reconocimiento de mensajes remotos de agente. El valor 1 en la columna StarvationElevation indica que la prioridad de los mensajes fue elevada para evitar que se agotaran. El valor 0 en la columna HonorBokerPriority indica que la opción HONOR_BROKER_PRIORITY no se habilitó en la base de datos de envío.

Revise también el contador del Monitor de sistema Broker/DBM Transport para ver las velocidades de transmisión de los mensajes de niveles de prioridad diferentes.

Síntoma: los mensajes no se reciben en la secuencia de la prioridad

Una instrucción RECEIVE sólo recupera los mensajes de un grupo de conversación. No recibirá los mensajes de las conversaciones de prioridad alta si pertenecen a un grupo de conversación diferente.

Una instrucción RECEIVE que no tenga una cláusula WHERE recupera los mensajes del grupo de conversación desbloqueado que tenga la mayor prioridad. Si el grupo de conversación tiene una mezcla de conversaciones de prioridad alta y de prioridad baja, la instrucción RECEIVE podría recuperar los mensajes de las conversaciones de prioridad baja. Esto puede ocurrir aun cuando la cola tenga mensajes de conversaciones de prioridad alta en otros grupos.

Una instrucción RECEIVE que tenga una cláusula WHERE que especifique un grupo de conversación sólo recupera los mensajes del grupo de conversación especificado. La instrucción RECEIVE recuperará los mensajes de las conversaciones de prioridad baja del grupo independientemente del nivel de prioridad de los mensajes de otros grupos de conversación.

Síntoma: no se asigna el nivel de prioridad esperado a los mensajes

Vea sys.conversation_endpoint para comprobar si al extremo de conversación se le asignó el nivel de prioridad esperado. Si no fue así, utilice sys.conversation_priorites para revisar las propiedades especificadas para las prioridades de la conversación en la base de datos con respecto al contrato, servicio local y servicio remoto que se utilizaron para el extremo de conversación.