Abbiamo un'applicazione a tre livelli con un client C#, un livello di servizio Web WCF C# e un database SQL Server. Il servizio Web si collega al database con ADO.NET. Tutto il nostro codice C# utilizza .NET Framework 2.0.Monitoraggio della connessione ADO.NET Tempo aperto
Recentemente, un cliente ha eseguito uno stress test sulla nostra applicazione. Durante il test, il server Web ha generato numerosi errori come il seguente:
Impossibile connettersi al database per la stringa di connessione '...'. Timeout scaduto. Il periodo di timeout è trascorso prima del completamento dell'operazione o il server non risponde.
Sono consapevole che esistono modi per rilevare gli errori di connessione quando il pool di connessioni è pieno e provare ad acquisire una connessione al di fuori del pool di connessioni. Abbiamo anche trovato diverse query che dovevano essere ottimizzate, ma non precisano i timeout della connessione al server web.
Stiamo cercando di capire il motivo per cui il server Web ha interrotto il collegamento al database. Ho installato il web server per abilitare tutti i ADO.NET performance counters. Tuttavia, non vedo nulla relativo ai tempi necessari per connettersi o timeout di connessione o simili. Idealmente, saremo in grado di rappresentare graficamente i tempi di connessione in perfmon
accanto agli altri contatori ADO.NET.
C'è un modo per monitorare le prestazioni di ADO.NET nell'acquisizione delle connessioni?
Immagino che potremmo creare il nostro contatore di prestazioni "tempo medio di apertura della connessione" temporizzando i tentativi di aprire le connessioni, ma preferirei usare qualcosa che esiste già.
SQL Profiler potrebbe aiutare in questo senso? –
@MrMoose: il profiler ha aiutato molto nella ricerca di alcune domande problematiche. Ma ho bisogno di qualcosa di specifico per monitorare i tempi di connessione per vedere quando salgono e quando iniziano a scadere. –