Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server, der eine Tabelle als Warteschlange verwendet

Die einzige Möglichkeit, eine Nicht-Pooling-Blockierung aus der Warteschlange zu erreichen, ist WAITFOR (RECEIVE) . Das impliziert Service Broker-Warteschlangen mit all dem zusätzlichen Overhead.

Wenn Sie normale Tabellen als Warteschlangen verwenden Sie können kein Non-Polling-Blocking erreichen. Sie müssen die Warteschlange abfragen, indem Sie nach einer Dequeue-Operation fragen, und wenn sie nichts zurückgibt, schlafen und es später erneut versuchen.

Ich fürchte, ich werde Andomar hier nicht zustimmen:Während seine Antwort als allgemeine Frage funktioniert:"Gibt es irgendwelche Zeilen in der Tabelle?" Wenn es um das Einreihen in Warteschlangen geht, ist das Überprüfen auf Zeilen wie diese aufgrund der geschäftigen Natur des überlappenden Enqueue/Dequeue ein (fast) garantierter Deadlock unter Last. Wenn es darum geht, Tabellen als Warteschlange zu verwenden, muss man sich immer an die grundlegenden Enqueue/Dequeue-Operationen halten und keine ausgefallenen Sachen ausprobieren.