Rimozione delle connessioni
Il pool di connessioni rimuove una connessione dal pool dopo che è rimasto inattivo per lungo tempo o se il pooler rileva che la connessione con il server è stata interrotta.
Si noti che una connessione interrotta può essere rilevata solo dopo aver tentato di comunicare con il server. Se viene rilevata una connessione che non è più connessa al server, viene contrassegnata come non valida.
Le connessioni non valide vengono rimosse dal pool di connessioni solo quando vengono chiuse o recuperate.
Se esiste una connessione a un server che è scomparso, questa connessione può essere disegnata dal pool anche se il pool di connessioni non ha rilevato la connessione interrotta e l'ha contrassegnata come non valida.
Questo è il caso perché il sovraccarico di verificare che la connessione sia ancora valida eliminerebbe i vantaggi di avere un pooler causando un altro round trip al server.
In questo caso, il primo tentativo di utilizzare la connessione rileverà che la connessione è stata interrotta e viene generata un'eccezione.
Fondamentalmente quello che stai vedendo è quell'eccezione nell'ultima frase.
Viene presa una connessione dal pool di connessioni, l'applicazione non è a conoscenza del fatto che la connessione fisica sia sparita, un tentativo di usarla si presuppone che la connessione fisica sia ancora presente.
E ottieni la tua eccezione.
Ci sono alcuni motivi comuni per questo.
- Il server è stato riavviato, questo chiuderà le connessioni esistenti.
In questo caso, dai un'occhiata al registro di SQL Server, generalmente disponibile in: C: \ Programmi \ Microsoft SQL Server \\ MSSQL \ LOG
Se il timestamp per l'avvio è molto recente, allora possiamo sospettare che questo sia ciò che ha causato l'errore. Prova a correlare questo timestamp con il tempo di eccezione.
16-04-2009 11: 32: 15.62 Server Registrazione dei messaggi di SQL Server nel file "C: \ Programmi \ Microsoft SQL Server \ MSSQL.1 \ MSSQL \ LOG \ ERRORLOG".
- Qualcuno o qualcosa ha ucciso lo SPID in uso.
Ancora una volta, dai un'occhiata al registro di SQL Server. Se trovi un kill, prova a correlare questo timestamp con il tempo di eccezione.
16-04-2009 11: 34: 09.57 L'ID processo spidXX XX è stato ucciso dal nome host xxxxx, ID processo host XXXX.
- C'è di nuovo un failover (ad esempio in una configurazione mirror), dai un'occhiata al registro di SQL Server.
In caso di failover, provare a correlare questo timestamp con l'ora dell'eccezione.
16-04-2009 11: 35: 12.93 spidXX Il database con mirroring “” sta cambiando i ruoli da “PRINCIPALE” a “SPECCHIO” a causa del Failover.