„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie kann SQL Server als gleichzeitige Warteschlange für mehrere Clients verwendet werden?

Wie kann SQL Server als gleichzeitige Warteschlange für mehrere Clients verwendet werden?

Veröffentlicht am 23.12.2024
Durchsuche:929

How Can SQL Server Be Used as a Concurrent Queue for Multiple Clients?

SQL Server als gleichzeitige Warteschlange mit mehreren Clients verwenden

In einem Szenario, in dem eine Tabelle als Warteschlange dient, ist es wichtig, sie zu konfigurieren und auf eine bestimmte Weise abzufragen Dadurch können mehrere Clients Warteschlangenelemente gleichzeitig verarbeiten.

Bei Verwendung der pessimistischen Zeilensperre mit UPDLOCK und ROWLOCK kann nur ein Worker die Sperre erwerben und eine Zeile verarbeiten. Um dieses Problem zu beheben und die gleichzeitige Verarbeitung zu ermöglichen, sollten Sie den folgenden Ansatz in Betracht ziehen:

Warteschlangenimplementierung mithilfe der OUTPUT-Klausel

Die OUTPUT-Klausel bietet einen Mechanismus zum atomaren Abrufen und Ändern einer Zeile . So implementieren Sie eine Warteschlange mithilfe der OUTPUT-Klausel:

with CTE as (
  SELECT TOP(1) COMMAND, PROCESSED
  FROM TABLE WITH (READPAST)
  WHERE PROCESSED = 0)
UPDATE CTE
  SET PROCESSED = 1
  OUTPUT INSERTED.*;

Diese Abfrage führt die folgenden Schritte atomar aus:

  1. Verwendet den WITH-Hinweis (READPAST), um alle gesperrten Zeilen zu überspringen.
  2. Wählt den Anfang aus Zeile mit PROCESSED=0.
  3. Aktualisiert die ausgewählte Zeile, um sie als verarbeitet zu markieren (PROCESSED=1).
  4. Gibt die aktualisierte Zeile aus, die vom Worker zur Verarbeitung verwendet werden kann.

Clustered Index Optimization

Um die Leistung weiter zu optimieren, ist es wichtig, einen Clustered-Index für die Spalte PROCESSED zu erstellen. Dadurch wird sichergestellt, dass die Daten in der Reihenfolge ihrer Verarbeitung gespeichert werden.

CREATE CLUSTERED INDEX cdxTable on TABLE(PROCESSED, ID);

Avoid Non-Standard Queries

Für einen optimalen Durchsatz ist es wichtig, das Abfragen der Warteschlangentabelle mit anderen Methoden als dem oben beschriebenen Vorgang zum Entfernen aus der Warteschlange zu vermeiden. Der Versuch, einen Blick auf die Tabelle zu werfen oder sie für weitere Zwecke zu verwenden, kann zu Deadlocks und Leistungseinbußen führen.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3