Epizoda

Časový limit příkazu SQL Serveru – Vypršení časového limitu aplikace – Rozšířená pozornost událostí

Pokud pro přístup k datům z SQL Serveru použijete ODBC nebo SqlClient, dotaz se ve výchozím nastavení zruší, pokud v určitém časovém období neexistuje žádná odpověď ze serveru (ve výchozím nastavení 30 sekund). ODBC nebo SqlClient se spustí časovač po odeslání dotazu na SQL Server a pokud nedojde k žádným výsledkům ze serveru do 30 sekund, dotaz bude zrušen a do aplikace se odešle chybová zpráva časového limitu. Pokud byl síťový paket (obsahující výsledky dotazu) přijat 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 v tomto 30sekundovém období nepřijde další síťový paket, dotaz se zruší.

Běžné důvody vypršení časového limitu příkazu SQL jsou neoptimální schémata nebo neefektivní dotazy, které se spouští po dlouhou dobu nebo které chybí indexy nebo problémy s čekáním na uzamčení. Je důležité ladit dotazy a nezvyšovat nastavení časového limitu příkazu SQL.

Ve videu je příklad, ve kterém 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 jak 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ým řešením.

K identifikaci příkazu, 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 aplikaci 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 hodnotu 0, což znamená žádný časový limit. Když se spustí dotaz nebo uložená procedura, kliknete-li na tlačítko Zrušit (červený čtverec), odešle se stejná pozornost sql Serveru (například vypršení časového limitu příkazu SQL). A tím se v rozšířených událostech vygeneruje událost sqlserver.attention.

V následujícím videu vidíte 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čit online praktickou ukázku.