Twitter Profile
salta alla navigazione

Problemi con le pooled connections? Ecco come monitorare SQL Server 31 marzo 2009

Inviato da LukePet in : Chicche, Guide, Informatica, Software, Soluzioni, Sviluppo, Web, Windows , trackback

Un paio di settimane fa ho avuto un problema con un’applicazione ASP.NET, ma poi ricercando per la rete e consultandomi con qualche voce esperta sono riuscito a trovare un modo per affrontare e risolvere la questione. Visto che le informazioni che ho raccolto potrebbero tornare utili ad altri, le metto per iscritto sul blog.

Dunque, avevo un sito montato su IIS (su un virtual server con sistema operativo Windows Server 2003)…gli utenti che lo utilizzavano, dopo un pò di attività, si imbattevano in un “Server Error” dal seguente messaggio:

Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool.
This may have occurred because all pooled connections were in use and max pool size was reached.

Dal messaggio si capiva che c’era qualche problema con le connessioni al database gestite all’interno dell’applicazione; visto che l’architettura software non era poi così banale avevo la necessità di monitorare le chiamate al db in modo da individuare la pagina responsabile del malfunzionamento…ed è qui che ho scoperto la straordinaria utilità del monitor delle prestazioni di Windows! Grazie a lui infatti sono riuscito a capire cosa non andava nel programma ed ho riparato il tutto.

perfmon
Il monitor delle prestazioni consente infatti di tenere sotto controllo una serie di contatori che il framework espone, tra questi ce ne sono alcuni che riguardano le connessioni. Ecco come fare per monitorarli:

1) avviate la vostra applicazione ASP.NET
2) avviate il monitor delle prestazioni (Start -> Esegui -> perfmon.exe)
3) andate nella finestra delle performance e selezionate la visualizzazione dei dati in modalità “Rapporto”
4) aprite la finestra di selezione per aggiungere [+] i contatori che vi interessano
5) selezionate tra i contatori disponibili il gruppo “Provider di dati .NET per SqlServer”
6) selezionate l’istanza di interesse (potete selezionarle anche tutte per non sbagliare)

A questo non vi resta che navigare nell’applicazione e controllare l’andamento dei contatori. Nel mio caso i contatori da tenere sott’occhio erano principalmente due: il contatore NumberOfReclaimedConnections ed il contatore NumberOfPooledConnections.

Così, navigando tra le pagine, sono riuscito ad individuare il punto in cui il sito saturava il pool; il tutto era dovuto ad un blocco di istruzioni che apriva una serie di connessioni senza chiuderle (le cosiddette leaking connections) e questo chiaramente provocava il problema.

Bene, spero che queste informazioni tornino utili a qualcheduno. Buon sviluppo a tutti.