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.
Siehe auch