Odcinek

Limit czasu polecenia programu SQL Server — limit czasu aplikacji — rozszerzona uwaga o zdarzeniach

Jeśli do uzyskiwania dostępu do danych z programu SQL Server używasz odBC lub SqlClient, domyślnie zapytanie zostanie anulowane, jeśli nie ma odpowiedzi z serwera w określonym przedziale czasu (domyślnie 30 sekund). OdBC lub SqlClient uruchomi czasomierz po wysłaniu zapytania do programu SQL Server i jeśli nie ma wyników z serwera w ciągu 30 sekund, zapytanie zostanie anulowane, a komunikat o błędzie przekroczenia limitu czasu zostanie wysłany do aplikacji. W przypadku odebrania pakietu sieciowego (zawierającego wyniki zapytania) w ciągu 30 sekund, a jeśli spodziewamy się dodatkowych pakietów sieciowych (dodatkowych wierszy, które nie mogą zmieścić się w pierwszym pakiecie sieciowym), czasomierz zostanie uruchomiony ponownie, jeśli następny pakiet sieciowy nie zostanie odebrany w ciągu tego 30 sekundy, zapytanie zostanie anulowane.

Typowe przyczyny przekroczenia limitu czasu polecenia SQL to niewykonalne schematy lub niewydajne zapytania, które są wykonywane przez długi czas lub które pomijają indeksy lub problemy z oczekiwaniem na blokadę. Ważne jest, aby dostroić zapytania, a nie zwiększyć ustawienia limitu czasu polecenia SQL.

W filmie pokazano przykład, w którym zmniejszenie rozmiaru pakietu sieciowego eliminuje przekroczenie limitu czasu, ten pokaz polega na zrozumieniu, w jaki sposób pakiety sieciowe są zaangażowane w resetowanie czasomierza i lepsze zrozumienie limitu czasu. Zmiana rozmiaru pakietów sieciowych nie jest rozwiązaniem, które pozwala uniknąć przekroczenia limitu czasu, dostrajania nie optymalnego schematu lub niewydajnych zapytań lub dodawania indeksów lub unikania oczekiwania na blokadę jest właściwym rozwiązaniem.

Aby zidentyfikować polecenie, które prowadzi do błędu przekroczenia limitu czasu polecenia SQL, można użyć zdarzeń rozszerzonych i monitorować zdarzenie "sqlserver.attention". Rozszerzony skrypt zdarzenia używany w filmie wideo jest dostępny w www.sqlvideo.com/xevents.

W programie SQL Server Management Studio limit czasu polecenia SQL można zmienić przy użyciu opcji w oknie dialogowym połączenia. Domyślnie jest ustawiona wartość "0", co oznacza brak limitu czasu. Jeśli zapytanie lub procedura składowana jest wykonywane, jeśli klikniesz przycisk Anuluj (czerwony kwadrat), ta sama uwaga zostanie wysłana do programu SQL Server (na przykład limit czasu polecenia SQL). Spowoduje to z kolei wygenerowanie zdarzenia "sqlserver.attention" w zdarzeniach rozszerzonych.

W poniższym filmie wideo przedstawiono przykład przekroczenia limitu czasu polecenia SQL. Narzędzie SQLTest symuluje praktyczne laboratoria bez konieczności rejestracji. Możesz ćwiczyć przykład praktyczny online podczas oglądania filmu wideo.