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 gleichzeitig Warteschlangenelemente verarbeiten.
Bei Verwendung der pessimistischen Zeilensperre mit UPDLOCK und ROWLOCK kann nur ein Worker zugreifen die Sperre und verarbeiten Sie eine Zeile. 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:
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);
Nicht standardmäßige Abfragen vermeiden
Für einen optimalen Durchsatz ist es wichtig, Abfragen der Warteschlangentabelle mit zu vermeiden andere Methoden als den oben beschriebenen Vorgang zum Entfernen aus der Warteschlange. 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.
Das obige ist der detaillierte Inhalt vonWie kann SQL Server als gleichzeitige Warteschlange für mehrere Clients verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!