Avsnitt

Tidsgräns för SQL Server-kommandon – Tidsgräns för program – Utökad händelseuppmärksamhet

När du använder ODBC eller SqlClient för att komma åt data från SQL Server avbryts som standard frågan om det inte finns något svar från servern inom en viss tidsperiod (30 sekunder som standard). ODBC eller SqlClient startar en timer när frågan har skickats till SQL Server och om det inte finns några resultat från servern inom 30 sekunder avbryts frågan och ett felmeddelande om tidsgräns skickas till programmet. Om ett nätverkspaket (som innehåller frågeresultat) togs emot inom 30 sekunder, och om vi förväntar oss ytterligare nätverkspaket (ytterligare rader som inte får plats i det första nätverkspaketet), startas timern om om nästa nätverkspaket inte tas emot inom den här 30 sekundersperioden avbryts frågan.

De vanligaste orsakerna till sql-kommandots timeout är icke-optimala schema- eller ineffektiva frågor som körs under en längre tid eller som missar index eller problem med att låsa väntetider. Det är viktigt att justera frågorna i stället för att öka tidsgränsinställningarna för SQL-kommandot.

I videon visas ett exempel där en minskning av storleken på nätverkspaketen eliminerar tidsgränsen. Den här demonstrationen är att förstå hur nätverkspaket ingår i återställningen av timern och att utveckla en bättre förståelse för tidsgränsen. Att ändra storleken på nätverkspaket är inte en lösning för att undvika timeout, justera icke-optimala scheman eller ineffektiva frågor eller lägga till index eller undvika låsvänte är rätt lösning.

Om du vill identifiera kommandot som leder till sql-kommandots timeout-fel kan du använda Utökade händelser och övervaka händelsen "sqlserver.attention". Det utökade händelseskriptet som används i videon finns på www.sqlvideo.com/xevents.

I SQL Server Management Studio kan tidsgränsen för SQL-kommandot ändras med hjälp av Alternativ i anslutningsdialogrutan. Som standard är detta inställt på "0", vilket innebär att det inte finns någon tidsgräns. När en fråga eller en lagrad procedur körs, om du klickar på knappen Avbryt (den röda fyrkanten), skickas samma uppmärksamhet till SQL Server (t.ex. tidsgräns för SQL-kommandot). Och detta genererar i sin tur händelsen "sqlserver.attention" i Extended Events.

I videon nedan kan du se ett exempel på tidsgränsen för SQL-kommandot. SQLTest Tool simulerar praktiska labbövningar åt dig, ingen registrering krävs. Du kan öva på det praktiska exemplet online när du tittar på Videon.

Har du feedback till oss? Skicka in ett problem här.