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:
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.
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