W celu uniknięcia napowietrznej utworzenia nowego połączenia za każdym razem potrzeby zapytań wystrzeliwanych przeciwko MySQL, istnieją dwie możliwości:MySQL - Trwałe połączenie vs zestawianie połączeń
- Stałe połączenia, przy czym nowe połączenie jest zażądano sprawdzenia, czy "identyczne" połączenie jest już otwarte, a jeśli tak, użyj go.
- Pule połączeń, w których klient utrzymuje pulę połączeń, dzięki czemu każdy wątek, który musi korzystać z połączenia, wyewidencjonuje jeden z puli i po zakończeniu przywróci go do puli.
Tak więc, jeśli mam wielowątkową aplikację serwerową, która ma obsłużyć tysiące żądań na sekundę, a każdy wątek musi wystrzelić zapytanie do bazy danych, to jaka jest lepsza opcja?
Z mojego rozumowania, Dzięki stałym połączeniom wszystkie wątki w mojej aplikacji będą próbowały używać tego samego trwałego połączenia z bazą danych, ponieważ wszystkie używają identycznych połączeń. Jest to jedno połączenie współużytkowane przez wiele wątków aplikacji - w rezultacie żądania będą blokowane wkrótce po stronie bazy danych.
Jeśli korzystam z mechanizmu łączenia połączeń, wszystkie wątki aplikacji będą współużytkować pulę połączeń. Tak więc istnieje mniejsze prawdopodobieństwo żądania zablokowania. Jednak w przypadku łączenia połączeń, czy wątek aplikacji powinien czekać na uzyskanie połączenia z puli, czy powinien mimo to wysłać zapytanie o połączenia w puli i czy kolejkowanie w bazie danych jest możliwe?
W przypadku łączenia połączeń deweloper aplikacji może kontrolować, kiedy i ile połączeń ma być otwieranych/zamykanych. W przypadku MySQL, jak można kontrolować liczbę "identycznych" trwałych połączeń? Czy są jakieś parametry konfiguracyjne serwera dla tego samego? – user1259642
W pulach, z których korzystam, ustaw minimalny i maksymalny rozmiar puli i określ czas bezczynności, po którym połączenie zostanie zamknięte (oraz kilka innych rzeczy). – mrab