Freigeben über


Leistung (Service Broker)

Die Leistung einer Service Broker-Anwendung wird im Allgemeinen durch zwei Faktoren bestimmt:

  • Die Anzahl von Nachrichten, die innerhalb eines angegebenen Zeitraums eingehen.

  • Die Geschwindigkeit, mit der die Anwendung jede Nachricht verarbeitet.

Die Überwachung dieser beiden Faktoren ist der Schlüssel zum Verständnis der Leistung der Anwendung.

Service Broker bietet eine Gruppe von Leistungsindikatoren, die Informationen zu den Aktivitäten bereitstellen. Service Broker protokolliert darüber hinaus schwerwiegende Fehler im SQL Server-Fehlerprotokoll und im Windows-Anwendungsereignisprotokoll. Weitere Informationen zu den Leistungsindikatoren, dynamischen Verwaltungssichten und Ablaufverfolgungsereignissen für Service Broker finden Sie unter Überwachen (Service Broker).

Optimieren einer gespeicherten Prozedur (Service Broker)

Die Optimierung einer gespeicherten Prozedur, in der Service Broker verwendet wird, unterscheidet sich nur wenig von der Optimierung einer anderen gespeicherten Prozedur. Allerdings gibt es dabei einige zusätzliche Überlegungen.

Verwenden Sie zuerst die WAITFOR-Klausel. Nachrichten gehen selten in vorhersehbaren Intervallen ein. Auch bei einem Dienst, bei dem Nachrichten annähernd mit derselben Geschwindigkeit eingehen, mit der sie von der gespeicherten Prozedur verarbeitet werden, können zeitweilig keine Nachrichten verfügbar sein. Deshalb sollte in der Prozedur eine WAITFOR-Klausel zusammen mit einer RECEIVE-Anweisung oder einer GET CONVERSATION GROUP-Anweisung verwendet werden. Ohne WAITFOR kehren diese Anweisungen sofort zurück, wenn keine verfügbaren Nachrichten in der Warteschlange vorhanden sind. Je nach Implementierung der gespeicherten Prozedur kann die Prozedur dann die Anweisung in einer Schleife erneut durchlaufen und dabei unnötig Ressourcen verbrauchen, oder die Prozedur kann beendet und kurz danach erneut aktiviert werden, wodurch noch mehr Ressourcen verbraucht werden als bei einer einfachen Ausführung der Prozedur.

Durch das Verwenden der WAITFOR-Klausel zusammen mit einer RECEIVE- oder GET CONVERSATION GROUP-Anweisung wird die Unvorhersehbarkeit beim Timing berücksichtigt. Wenn eine Anwendung ständig als Hintergrunddienst ausgeführt wird, geben Sie kein Timeout in der WAITFOR-Anweisung an. Wenn die Anwendung von Service Broker aktiviert oder als geplanter Auftrag ausgeführt wird, geben Sie ein kurzes Timeout an, z. B. 500 Millisekunden. Eine Anwendung, in der die WAITFOR-Anweisung verwendet wird, verarbeitet unvorhersehbare Intervalle zwischen Nachrichten. Außerdem verbraucht eine aktivierte Anwendung, die nach einem kurzen Timeout beendet wird, keine Ressourcen, wenn keine Nachrichten verarbeitet werden müssen.

Service Broker stellt sicher, dass jeweils nur eine Instanz einer Anwendung Nachrichten für Konversationen empfangen kann, die den gleichen Konversationsgruppenbezeichner aufweisen. Entwerfen Sie Anwendungen so, dass sie die Konversationsgruppensperrung zum Zweck der Synchronisierung nutzen. Wenn eine Anwendung Statusinformationen verwaltet, sollten Sie den Konversationsgruppenbezeichner verwenden, um den Status für die Konversation zu identifizieren. Verarbeiten Sie mehrere Nachrichten für eine Konversationsgruppe in derselben Transaktion. Im Allgemeinen sollten Sie jedoch nur Nachrichten für eine einzelne Konversationsgruppe in einer gegebenen Transaktion verarbeiten. Dadurch wird sichergestellt, dass mehr als eine Instanz der Anwendung Nachrichten verarbeiten kann, auch wenn die Anzahl von Konversationsgruppen relativ gering ist.

Vermeiden Sie außerdem das Verwenden der Beibehaltung von Nachrichten. Das Verwalten einer separaten Protokolltabelle, in der die wichtigsten Informationen aus einer Nachricht gespeichert werden, verbessert die Leistung. Verwenden Sie die Beibehaltung nur Nachrichten nur, wenn Ihre Anwendung die genauen gesendeten und empfangenen Nachrichten benötigt.

Beenden Sie Konversationen, wenn die Aufgabe abgeschlossen ist. Service Broker verwaltet Statusinformationen für jede aktive Konversation. Obwohl die Menge an Statusinformationen für eine bestimmte Konversation gering ist, kann die Leistung einer Anwendung, die keine Konversationen beendet, mit der Zeit abnehmen.

Halten Sie Transaktionen kurz. Wenn das Konversationsmuster für den Dienst eine große Anzahl von Nachrichten in derselben Konversationsgruppe umfasst, kann die Begrenzung der Anzahl von in jeder Transaktion verarbeiteten Nachrichten den Gesamtdurchsatz verbessern.