Condividi tramite


Risoluzione dei problemi relativi alle priorità di conversazione

In questa sezione vengono forniti suggerimenti per la risoluzione di problemi comuni correlati alle priorità di conversazione di Service Broker.

Tecnica: determinare se l'opzione HONOR_BROKER_PRIORITY è impostata su ON.

Utilizzare la colonna is_broker_priority_honored di sys.databases per determinare lo stato dell'opzione di database 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;

Sintomo: i messaggi non vengono inviati in base alla sequenza di priorità

Aprire una traccia di SQL Server Profiler e rivedere gli eventi Remote Message Ack di Service Broker. Un valore 1 nella colonna StarvationElevation indica che la priorità dei messaggi è stata aumentata per impedire l'arresto del processo. Un valore 0 nella colonna HonorBokerPriority indica che l'opzione HONOR_BROKER_PRIORITY non è attivata nel database di invio.

Analizzare inoltre il contatore di Monitor di sistema Trasporto Broker/DBM per informazioni sulla velocità di trasmissione dei messaggi con livelli di priorità diversi.

Sintomo: i messaggi non vengono ricevuti in base alla sequenza di priorità

Un'istruzione RECEIVE consente di recuperare i messaggi solo da un gruppo di conversazioni. I messaggi di conversazioni con priorità alta non vengono ricevuti se appartengono a un gruppo di conversazioni diverso.

Un'istruzione RECEIVE senza una clausola WHERE consente di recuperare i messaggi del gruppo di conversazioni sbloccato con la massima priorità. Se il gruppo di conversazioni include una combinazione di conversazioni con priorità alta e con priorità bassa, tramite l'istruzione RECEIVE potrebbero venire recuperati i messaggi delle conversazioni con priorità bassa. Questo può verificarsi anche se la coda include messaggi di conversazioni con priorità alta in altri gruppi.

Un'istruzione RECEIVE con una clausola WHERE che specifica un gruppo di conversazioni consente di recuperare solo i messaggi del gruppo di conversazioni specificato. Tramite l'istruzione RECEIVE vengono recuperati i messaggi delle conversazioni con priorità bassa nel gruppo indipendentemente dal livello di priorità dei messaggi degli altri gruppi di conversazioni.

Sintomo: ai messaggi non viene assegnato il livello di priorità previsto

Visualizzare sys.conversation_endpoint per verificare se all'endpoint di conversazione è stato assegnato il livello di priorità previsto. In caso contrario, utilizzare sys.conversation_priorites per analizzare le proprietà specificate per le priorità di conversazione nel database rispetto al contratto, al servizio locale e al servizio remoto utilizzato per l'endpoint di conversazione.