Nun, aus Sicht der Anwendung gibt es:
- Verbindungszeitlimit (wie lange die App bereit ist zu warten, um eine Verbindung zu SQL Server herzustellen)
- Befehlszeitlimit (wie lange die App bereit ist, auf den Abschluss eines Befehls zu warten, einschließlich des Abrufs der Ergebnisse von SQL Server)
In meinen klassischen ASP-Tagen waren die Standardeinstellungen für diese 15 bzw. 30 Sekunden . Ich habe keine Ahnung, was sie heute in .NET standardmäßig sind.
SQL Server verfügt über eigene Zeitüberschreitungen, z. B.:
- Zeitlimit für Remote-Abfrage. Die Standardeinstellung ist 600 Sekunden (10 Minuten).
- Zeitlimit für Remote-Anmeldung. Die Standardeinstellung ist 10 Sekunden.
- Abfrage warten. Die Standardeinstellung ist -1 (25 x Abfragekosten).
- Zeitlimit für Volltextprotokoll-Handler. Die Standardeinstellung ist 60 Sekunden.
Sie können diese Werte für Ihr System hier sehen:
SELECT * FROM sys.configurations
WHERE configuration_id IN (1519,1520,1541,1557);
Es gibt auch @@LOCK_TIMEOUT
(standardmäßig -1 (unendlich)). So lange wartet SQL Server auf eine blockierte Ressource. Sie können dies für eine bestimmte Sitzung mit überschreiben SET LOCK_TIMEOUT
. Weitere Details hier .
Deadlocks könnten wohl auch in diese Kategorie fallen. Das System sucht alle 5 Sekunden nach Deadlock-Situationen, und es gibt keine Zauberformel, um zu bestimmen, wann der Deadlock in Bezug auf den Zeitpunkt des Starts einer der beteiligten Anforderungen auftritt. Dies liegt daran, dass SQL Server die älteste Transaktion nicht gewinnen lässt. Das Opfer wird basierend auf DEADLOCK_PRIORITY und der geschätzten Menge an Ressourcen ausgewählt, die zum Zurücksetzen des Opfers erforderlich sind. Weitere Details hier .
Es gibt auch ein Zeitlimit für die Speichergewährung (das mithilfe von Resource Governor angepasst werden kann). Abhängig von der Parallelität schlägt eine Abfrage nicht unbedingt fehl, wenn sie das Zeitlimit erreicht, bevor der gesamte angeforderte Speicher abgerufen wird. Sie wird nur mit dem zugewiesenen Betrag ausgeführt (und ist daher möglicherweise weniger effizient). Wenn dies fehlschlägt, wird wahrscheinlich Msg 8645 angezeigt.
Sie können sich ein Bild von anderen möglichen Timeout-Szenarien machen, die in SQL Server auftreten können, indem Sie die folgenden Fehlermeldungen überprüfen:
SELECT message_id, [text]
FROM sys.messages
WHERE language_id = 1033
AND ([text] LIKE '%timeout%' OR [text] LIKE '%time out%')
Ich halte es jedoch nicht für praktisch, machbar oder produktiv, wenn jemand versucht, Ihnen eine vollständige und vollständige Liste aller möglichen möglichen Timeout-Situationen zur Verfügung zu stellen. Lösen Sie die Probleme, die Sie haben, anstatt eine ganze Reihe von Problemen vorzeitig zu lösen, die Sie wahrscheinlich nie werden ...