Problembehandlung bei Konversationsprioritäten

Dieses Thema enthält Vorschläge zum Korrigieren allgemeiner Symptome, die im Zusammenhang mit Service Broker-Konversationsprioritäten auftreten.

Verfahren: Ermitteln, ob HONOR_BROKER_PRIORITY auf ON festgelegt ist

Verwenden Sie die sys.databasesis_broker_priority_honored-Spalte, um den Status der HONOR_BROKER_PRIORITY-Datenbankoption zu bestimmen:

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;

Symptom: Nachrichten werden nicht in der Reihenfolge der Priorität gesendet

Öffnen Sie eine SQL Server Profiler-Ablaufverfolgung, und prüfen Sie die Broker Remote Message Ack-Ereignisse. Der Wert 1 in der StarvationElevation-Spalte gibt an, dass die Priorität der Nachrichten erhöht wurde, um Ausschlüsse zu verhindern. Der Wert 0 in der HonorBokerPriority-Spalte gibt an, dass die HONOR_BROKER_PRIORITY-Option in der sendenden Datenbank nicht aktiviert wurde.

Prüfen Sie auch den Broker/DBM Transport System Monitor-Zähler, um die Übertragungsraten für Nachrichten mit unterschiedlichen Prioritätsstufen zu prüfen.

Symptom: Nachrichten werden nicht in der Reihenfolge der Priorität empfangen

Eine RECEIVE-Anweisung ruft nur Nachrichten aus einer Konversationsgruppe ab. Sie empfängt keine Nachrichten aus Konversationen mit hoher Priorität, wenn diese zu einer anderen Konversationsgruppe gehören.

Eine RECEIVE-Anweisung ohne WHERE-Klausel ruft Nachrichten aus der freigegebenen Konversationsgruppe mit der höchsten Priorität ab. Enthält die Konversationsgruppe eine Mischung aus Konversationen mit hoher und niedriger Priorität, könnte die RECEIVE-Anweisung Nachrichten aus den Konversationen mit niedriger Priorität abrufen. Dies kann auch auftreten, wenn die Warteschlange Nachrichten aus Konversationen mit hoher Priorität in anderen Gruppen enthält.

Eine RECEIVE-Anweisung mit WHERE-Klausel, die eine Konversationsgruppe angibt, ruft nur Nachrichten aus der angegebenen Konversationsgruppe ab. Die RECEIVE-Anweisung ruft Nachrichten aus Konversationen mit niedriger Priorität unabhängig von der Prioritätsstufe von Nachrichten aus anderen Konversationsgruppen ab.

Symptom: Nachrichten wird nicht die erwartete Prioritätsstufe zugewiesen

Prüfen Sie in sys.conversation_endpoint, ob dem Konversationsendpunkt die erwartete Prioritätsstufe zugewiesen wurde. Wenn dies nicht der Fall ist, verwenden Sie sys.conversation_priorites, um die für die Konversationsprioritäten in der Datenbank angegebenen Eigenschaften mit dem für den Konversationsendpunkt verwendeten Vertrag, lokalen Dienst und Remotedienst abzugleichen.