Usuwanie połączeń
Program puli połączeń usuwa połączenie z puli po długim okresie bezczynności lub po wykryciu przez niego, że połączenie z serwerem zostało zerwane.
Należy pamiętać, że zerwane połączenie można wykryć dopiero po próbie nawiązania komunikacji z serwerem. Jeśli zostanie znalezione połączenie, które nie jest już połączone z serwerem, jest oznaczane jako nieprawidłowe.
Nieprawidłowe połączenia są usuwane z puli połączeń tylko wtedy, gdy są zamknięte lub odzyskane.
Jeśli istnieje połączenie z serwerem, który zniknął, można je pobrać z puli, nawet jeśli pula połączeń nie wykryła zerwanego połączenia i oznaczyła je jako nieprawidłowe.
Dzieje się tak, ponieważ obciążenie związane ze sprawdzaniem, czy połączenie jest nadal prawidłowe, wyeliminowałoby korzyści wynikające z posiadania poolera, powodując kolejną podróż w obie strony do serwera.
W takim przypadku pierwsza próba użycia połączenia wykryje, że połączenie zostało zerwane, i zostanie zgłoszony wyjątek.
Zasadniczo to, co widzisz, to wyjątek w ostatnim zdaniu.
Połączenie jest pobierane z puli połączeń, aplikacja nie wie, że połączenie fizyczne zniknęło, próba jego użycia odbywa się przy założeniu, że połączenie fizyczne nadal istnieje.
I masz wyjątek.
Istnieje kilka typowych przyczyn takiego stanu rzeczy.
- Serwer został zrestartowany, spowoduje to zamknięcie istniejących połączeń.
W takim przypadku spójrz na dziennik SQL Server, zwykle znajdujący się w: C: \ Program Files \ Microsoft SQL Server \\ MSSQL \ LOG
Jeśli sygnatura czasowa uruchomienia jest bardzo aktualna, możemy podejrzewać, że to właśnie spowodowało błąd. Spróbuj skorelować ten znacznik czasu z czasem wyjątku.
2009-04-16 11: 32: 15.62 Server Logowanie komunikatów SQL Server w pliku „C: \ Program Files \ Microsoft SQL Server \ MSSQL.1 \ MSSQL \ LOG \ ERRORLOG”.
- Ktoś lub coś zabiło używany identyfikator SPID.
Ponownie spójrz na dziennik programu SQL Server. Jeśli znajdziesz zabójstwo, spróbuj skorelować ten znacznik czasu z czasem wyjątku.
2009-04-16 11: 34: 09.57 spidXX Identyfikator procesu XX został zabity przez nazwę hosta xxxxx, identyfikator procesu hosta XXXX.
- Ponownie występuje przełączanie awaryjne (na przykład w konfiguracji lustrzanej), spójrz na dziennik SQL Server.
Jeśli występuje przełączanie awaryjne, spróbuj skorelować ten znacznik czasu z czasem wyjątku.
2009-04-16 11: 35: 12.93 spidXX W lustrzanej bazie danych „” zmienia się role z „PRINCIPAL” na „MIRROR” z powodu pracy awaryjnej.