Episode

SQL Server-Befehlstimeout - Anwendungstimeout - Erweiterte Ereignisbe aufmerksamkeit

Wenn Sie ODBC oder SqlClient für den Zugriff auf Daten aus SQL Server verwenden, wird die Abfrage standardmäßig abgebrochen, wenn innerhalb eines bestimmten Zeitraums keine Antwort vom Server vorhanden ist (standardmäßig 30 Sekunden). ODBC oder SqlClient starten einen Timer nach dem Senden der Abfrage an SQL Server und wenn es innerhalb von 30 Sekunden keine Ergebnisse vom Server gibt, wird die Abfrage abgebrochen, und eine Timeout-Fehlermeldung wird an die Anwendung gesendet. Falls innerhalb von 30 Sekunden ein Netzwerkpaket (mit Abfrageergebnissen) empfangen wurde und wenn zusätzliche Netzwerkpakete (zusätzliche Zeilen, die nicht in das erste Netzwerkpaket passen konnten) erwartet werden, wird der Timer neu gestartet, wenn das nächste Netzwerkpaket innerhalb dieses 30-Sekunden-Zeitraums nicht empfangen wird.

Die häufigsten Gründe für das SQL Command-Timeout sind nicht optimale Schema- oder ineffiziente Abfragen, die für einen langen Zeitraum ausgeführt werden oder probleme mit Indizes oder Sperren von Wartezeiten verpassen. Es ist wichtig, die Abfragen zu optimieren, anstatt die SQL Command-Timeouteinstellungen zu erhöhen.

Im Video wird ein Beispiel veranschaulicht, in dem durch verringern der Größe des Netzwerkpakets das Timeout beseitigt wird. Diese Demonstration besteht darin, zu verstehen, wie Netzwerkpakete daran beteiligt sind, den Timer zurückzusetzen und ein besseres Verständnis des Timeouts zu entwickeln. Das Ändern der Netzwerkpaketgröße ist keine Lösung, um Timeout zu vermeiden, nicht optimale Schemas zu optimieren oder ineffiziente Abfragen hinzuzufügen oder Indizes hinzuzufügen oder Sperrwartezeiten zu vermeiden, sind die richtige Lösung.

Um den Befehl zu identifizieren, der zu EINEM SQL-Befehlstimeoutfehler führt, können Sie erweiterte Ereignisse verwenden und das Ereignis "sqlserver.attention" überwachen. Das im Video verwendete erweiterte Ereignisskript steht www.sqlvideo.com/xevents zur Verfügung.

In SQL Server Management Studio kann das SQL-Befehlstimeout mithilfe von "Optionen" im Verbindungsdialogfeld geändert werden. Standardmäßig ist dies auf "0" festgelegt, was kein Timeout bedeutet. Wenn eine Abfrage oder gespeicherte Prozedur ausgeführt wird, wenn Sie auf die Schaltfläche "Abbrechen" (das rote Quadrat) klicken, wird dieselbe Aufmerksamkeit an den SQL Server (z. B. SQL Command Timeout) gesendet. Und dies generiert wiederum das Ereignis "sqlserver.attention" in erweiterten Ereignissen.

Im folgenden Video sehen Sie ein Beispiel für das SQL Command-Timeout. SQLTest Tool simuliert die praktischen Labore für Sie, keine Registrierung erforderlich. Sie können das Online-Beispiel praktisch üben, während Sie sich das Video ansehen.