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

Was macht SQL Server mit einer Anforderung mit Zeitüberschreitung?

Das Timeout wird von ADO.NET erzwungen. SQL Server kennt so etwas wie ein Befehlstimeout nicht. Der .NET-Client sendet einen „Achtung“-TDS-Befehl. Sie können dieses Verhalten mit SQL Profiler beobachten, da es ein "Achtung"-Ereignis hat.

Wenn SQL Server die Stornierung erhält, wird die aktuell ausgeführte Abfrage abgebrochen (genau wie SSMS es tut, wenn Sie die Stopp-Schaltfläche drücken). Der Stapel wird abgebrochen (genau wie in SSMS). Das bedeutet, dass kein Fangcode ausgeführt werden kann. Die Verbindung bleibt bestehen.

Nach meiner Erfahrung wird die Transaktion sofort rückgängig gemacht. Ich glaube jedoch nicht, dass dies garantiert ist.

TL;DR:Ein Timeout in ADO.NET verhält sich genauso, als ob Sie in SSMS Stopp gedrückt hätten (oder SqlCommand.Cancel aufgerufen hätten ).

Hier ist die Referenz dafür:https://techcommunity.microsoft.com/t5/sql-server-support/how-it-works-attention-attention-or-should-i-say -cancel-the/ba-p/315511