Stiamo eseguendo un'app Web (2 istanze) su Azure, supportata da un database SQL Azure. In qualsiasi momento ci sono 50-150 utenti che usano il sito web. Il database viene eseguito a livello di prestazioni S2. Il DTU è in media del 20% circa.Timeout di connessione frequente di SQL di Azure
Tuttavia, un paio di volte ogni giorno improvvisamente ricevo centinaia di errori nei miei log con timeout, come questo:
Si è verificato un errore durante l'esecuzione della definizione del comando. Vedi l'eccezione interna per i dettagli.
L'operazione di attesa è scaduta.
Timeout scaduto. Il periodo di timeout è trascorso prima del completamento dell'operazione o il server non risponde. Questo errore si è verificato durante il tentativo di connessione alla destinazione di routing. La durata spesa durante il tentativo di connessione al server originale era - [Pre-Login] initialization = 1; handshake = 21; [Login] inizializzazione = 0; Autenticazione = 0; [Post-Login] completo = 1;
Stiamo utilizzando EF6 per le query con il timeout del comando predefinito. Ho configurato questa strategia di esecuzione:
SetExecutionStrategy("System.Data.SqlClient",
() => new SqlAzureExecutionStrategy(10, TimeSpan.FromSeconds(15)));
Il database (circa 15 GB totali) è fortemente indicizzato. Questi errori si verificano dappertutto, di solito dozzine a centinaia nell'arco di 1-2 minuti.
Quali operazioni posso intraprendere per evitare che ciò accada?
Il servizio app e il database SQL si trovano nello stesso datacenter? –
Sì, si trovano nella stessa regione. – Knelis