Sugerowałbym, że w prawie każdym ustawieniu klient/serwer, nie jest dobrym pomysłem pozostawienie otwartych połączeń, gdy nie są potrzebne.
Mam na myśli w szczególności połączenia DB2/z, ale dotyczy to również wszystkich serwerów (bazy danych i innych). Połączenia te zużywają zasoby na serwerze, które najlepiej można wykorzystać gdzie indziej.
Jeśli miałbyś utrzymywać połączenia otwarte w środowisku korporacyjnym, gdzie dziesiątki tysięcy klientów łączy się z bazą danych, prawdopodobnie przyniosłeśaby nawet komputerowi klatkę na komputer.
Jestem za ideą łączenia połączeń, ale nie za pomysł, aby otworzyć sesje indywidualne na zawsze.
Moja rada będzie w następujący sposób:
1/posiadają trzy rodzaje połączeń w puli połączeń:
- zamknięte (więc nie faktycznie w basenu).
- gotowy, czyli otwarty, ale nieużywany przez klienta.
- aktywne, czyli używane przez klienta.
2/Twoje pulowanie połączeń utrzymuje niewielką liczbę gotowych połączeń, minimalnie N i maksimum M. N może być dostosowywany w zależności od maksymalnej prędkości, z jaką klienci żądają połączeń. Jeśli liczba gotowych połączeń spadnie do zera, potrzebujesz większego N.
3/Gdy klient chce połączenia, daj mu jeden z gotowych (uczynienie go aktywnym), a następnie natychmiast otwórz nowy, jeśli jest teraz mniej niż N gotowy (ale nie każ klientowi czekać na to do ukończenia, lub stracisz przewagę łączenia). Gwarantuje to, że zawsze będzie co najmniej N gotowych połączeń. Jeśli żaden nie jest gotowy, gdy klient go potrzebuje, będą musieli poczekać, aż utworzysz nowy.
4/Gdy klient zakończy połączenie aktywne, należy go przywrócić do stanu gotowości, jeśli jest mniej niż M gotowych połączeń. W przeciwnym razie zamknij. Zapobiega to posiadaniu więcej niż M gotowych połączeń.
5/Okresowe odzyskiwanie gotowych połączeń, aby zapobiec nieaktualnym połączeniom. Jeśli masz więcej niż N gotowych połączeń, po prostu zamknij najstarsze połączenie. W przeciwnym razie zamknij i otwórz ponownie.
Ma to tę zaletę, że wystarczy mieć gotowe gotowe połączenia i w puli połączeń bez przeciążania serwera.
Dzięki Bill. Nie martwię się stanem sesji, ponieważ moje sesje są otwierane tylko w razie potrzeby, a następnie zamknięte; trzymanie jednego otwartego przez 8 godzin to i tak chyba zły pomysł. Czy powinienem to skonfigurować w adresie URL JDBL, czy mogę skonfigurować go za pomocą właściwości hibernacji? – Uri
Chciałbym skonfigurować go w adresie URL JDBC. –
Nie zaleca się używania właściwości 'autoReconnect', ponieważ ma ona niepożądane skutki uboczne. Zamiast tego powinieneś rozważyć zwiększenie 'wait_timeout' na serwerze do wysokiej wartości z domyślnej wartości 8 godzin. Odsyłacz: https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-configuration-properties.html – nuaavee