Używam MySQL's temporary tables z connection pooling.Pule połączeń i zwalnianie tabel tymczasowych po powrocie
Zazwyczaj tabele tymczasowe utworzone w sesji pozostają w tej sesji i są usuwane po zamknięciu połączenia. Jednak ponieważ używam łączenia połączeń, a połączenia fizyczne nie są faktycznie zamykane po wywołaniu java.sql.Connection.close()
, znajduję tymczasowe tabele pozostające w pobliżu i wpływające na następną sesję.
Powoduje to wyciek zasobów z bazy danych, ponieważ tabele tymczasowe nie są natychmiast zwalniane, a także zderzenia nazw ze względu na zderzające się nazwy tabel.
Intuicyjnie spodziewam się czystej karty pożyczyć połączenie. Jak można to osiągnąć?
- Nie istnieje odpowiednik dla MySQL SQL Server's
sp_reset_connection
. - Nawet jeśli był, nie widzę, jak zadzwonić pod numer dbcp2 can be configured po zwrocie połączenia.
- Zawsze zamykanie połączenia fizycznego po powrocie do puli może działać, ale nie widzę sposobu, w jaki można również skonfigurować dbcp2.
Oprócz tabelach przejściowych, problem ten dotyczy także:
- User-Defined Variables (i.e.
SET @foo = 1
) określania zakresu - Zwolnienie User level locks (i.e.
GET_LOCK()
)
* "Zawsze zamykanie połączenia fizycznego po powrocie do basenu może działać" * ... to jest sprzeczność w rozumieniu, prawda? Jeśli połączenie zostanie zamknięte, nie wróci ono do puli. Możesz spróbować zmusić pulę do zwolnienia połączenia db, gdy skończysz, wysyłając zapytanie 'ROLLBACK RELEASE;' To prawie na pewno zrobi to, co próbujesz zrobić, ale efekty uboczne będą interesujące i połączenie stanie się bit bez sensu. Zasadniczo, przy łączeniu, twój kod musi być pewny, że sam inicjuje, 'UPUŚĆ TABORĘ CZASOWĄ, JEŻELI ISTNIEJĄ ... ...' przed utworzeniem tabeli itp. –