Wir betreiben eine Webanwendung (2 Instanzen) auf Azure, die von einer SQL Azure-Datenbank unterstützt wird. Zu jeder Zeit nutzen 50-150 Benutzer die Website. Die Datenbank wird auf der Ebene S2 ausgeführt. Die DTU liegt durchschnittlich bei 20%.Azure SQL häufige Verbindungstimeouts
jedoch ein paar Mal jeden Tag, als ich plötzlich hunderte von Fehlern in meinem Logs mit Timeouts, wie diese:
ist ein Fehler aufgetreten, während der Befehlsdefinition ausgeführt wird. Weitere Informationen finden Sie in der inneren Ausnahme.
Die Wartezeit ist abgelaufen.
Timeout abgelaufen. Das Zeitlimit ist vor dem Abschluss des Vorgangs abgelaufen oder der Server reagiert nicht. Dieser Fehler ist beim Versuch aufgetreten, eine Verbindung zum Routingziel herzustellen. Die Dauer beim Versuch, eine Verbindung zum ursprünglichen Server herzustellen, war - [Pre-Login] initialization = 1; Handschlag = 21; [Login] Initialisierung = 0; Authentifizierung = 0; [Post-Login] abgeschlossen = 1;
Wir verwenden EF6 für Abfragen mit dem Standardbefehlszeitlimit. Ich habe diese Ausführungsstrategie konfiguriert:
SetExecutionStrategy("System.Data.SqlClient",
() => new SqlAzureExecutionStrategy(10, TimeSpan.FromSeconds(15)));
Die Datenbank (ca. 15 GB insgesamt) ist stark indiziert. Diese Fehler treten überall auf, normalerweise innerhalb von 1-2 Minuten von Dutzenden bis zu Hunderten.
Welche Schritte kann ich unternehmen, um dies zu verhindern?
Sind der App Service und die SQL-Datenbank im selben Datencenter? –
Ja, sie sind in der gleichen Region. – Knelis