Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Problem z pulą połączeń

Oto przebieg wydarzeń ilustrujący, co się dzieje:

  1. Połączenie jest wymagane i używane przez dzwoniącego (aplikacja lub pula połączeń)
  2. Rozmówca przechowuje odniesienie do niego, dzięki czemu połączenie może być ponownie użyte
  3. Rozmówca przechodzi przez okres nieaktywności (na przykład system deweloperski w nocy lub system kontroli jakości w weekend).
  4. Gdy połączenie z bazą danych nie jest używane, baza danych traktuje połączenie jako bezczynne. Ponieważ jest bezczynny, po pewnym czasie (domyślnie MySQL to 8 godzin) baza danych zamyka połączenie.
  5. Rozmówca nadal ma dojście do połączenia, a kiedy rozmówca ponownie próbuje użyć połączenia, nieprzyjemnie odkrywa, że ​​połączenie zostało zamknięte.

Powodem, dla którego autoReconnect=true działa i że pula testująca poprawność połączenia działa, jest to, że instruujesz system wywołujący, aby przetestował połączenie pod kątem tej sytuacji i spróbował ponownie, jeśli taka sytuacja się wydarzy.

Jeśli chodzi o to, czy zapytanie weryfikacyjne wpłynie na wydajność:teoretycznie jest to użycie połączenia do zrobienia czegoś. W praktyce coś jest tak trywialne, że jego efekt jest znikomy w kontekście całego systemu.

[EDYTUJ]

W tym przypadku Apache DBCP jest pulą połączeń zawieszającą się na połączeniu, ale NIE chcesz, aby DBCP zamykał połączenie po każdym wywołaniu. Celem puli połączeń jest utrzymanie połączenia w gotowości do następnego wywołania, ponieważ tworzenie połączeń jest kosztowne. Obiekty połączeń obsługiwane przez pulę są obsługiwane przez rzeczywiste połączenia z bazą danych, a baza danych to ta, która zamyka to rzeczywiste połączenie po upływie limitu czasu bezczynności. Należy zauważyć, że limit czasu zamknięcia bezczynnych połączeń jest skonfigurowany w bazie danych, a nie w puli połączeń. Z tego powodu DBCP nie ma możliwości sprawdzenia, czy połączenie zostało zamknięte, czy nie, chyba że rzeczywiście próbuje się z nim połączyć. Dlatego potrzebujesz zapytania weryfikacyjnego.

Więcej informacji na temat konfigurowania DBCP można znaleźć na stronie konfiguracji oraz dokumentację API .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Longtext odpowiednik MySQL w Microsoft SQL?

  2. MySQL — Uzyskaj pierwsze 3 wartości oddzielone przecinkami

  3. Dlaczego password_verify zwraca wartość false?

  4. Drukowanie wyniku zapytania mysql ze zmiennej

  5. Vagrant - zdalne połączenie z mysql - poza vagrant połączeniem ssh