Epizoda

vypršení časového limitu příkazu SQL Server – Vypršení časového limitu aplikace – Rozšířená pozornost událostí

Pokud pro přístup k datům z SQL Server použijete rozhraní ODBC nebo SqlClient, dotaz se ve výchozím nastavení zruší, pokud server během určitého časového období neobsahuje odpověď (ve výchozím nastavení 30 sekund). ROZHRANÍ ODBC nebo SqlClient spustí časovač po odeslání dotazu do SQL Server a pokud nedojde k žádným výsledkům ze serveru do 30 sekund, dotaz se zruší a do aplikace se odešle chybová zpráva s časovým limitem. V případě přijetí síťového paketu (obsahujícího výsledky dotazu) během 30 sekund a pokud očekáváme další síťové pakety (další řádky, které se nevejdou do prvního síťového paketu), časovač se restartuje, pokud další síťový paket v tomto 30sekundovém období nepřijde, dotaz se zruší.

Běžné důvody SQL vypršení časového limitu příkazu jsou neoptimální schéma nebo neefektivní dotazy, které se provádějí po dlouhou dobu nebo že dochází k problémům s čekáním na zablokování nebo indexy. Je důležité vyladit dotazy a nezvyšovat nastavení časového limitu příkazu SQL.

V příkladu videa je znázorněno, kde snížení velikosti síťového paketu eliminuje časový limit, je tato ukázka pochopit, jak se síťové pakety podílejí na resetování časovače a lépe porozumět vypršení časového limitu. Změna velikosti síťového paketu není řešením, aby se zabránilo vypršení časového limitu, ladění neoptimální schématu nebo neefektivních dotazů nebo přidání indexů nebo zabránění čekání na uzamčení je správné řešení.

Pokud chcete identifikovat příkaz, který vede k chybě vypršení časového limitu příkazu SQL, můžete použít rozšířené události a monitorovat událost sqlserver.attention. Rozšířený skript událostí použitý ve videu je k dispozici na www.sqlvideo.com/xevents.

V SQL Server Management Studio je možné časový limit příkazu SQL změnit pomocí možnosti v dialogovém okně připojení. Ve výchozím nastavení je tato hodnota nastavená na 0, což znamená žádný časový limit. Když se provádí dotaz nebo uložená procedura, kliknete-li na tlačítko Storno (červený čtverec), bude stejná pozornost odeslána do SQL Server (například SQL vypršení časového limitu příkazu). A to zase vygeneruje událost sqlserver.attention v rozšířených událostech.

V následujícím videu můžete vidět příklad časového limitu příkazu SQL. Nástroj SQLTest simuluje praktická cvičení za vás, bez nutnosti registrace. Při sledování videa si můžete procvičovat online praktický příklad.