Jak długo trwa „za długo”, aby połączenia MySQL mogły spać?

38

Zalogowałem się na serwerze, aby sprawdzić stan bazy danych, i zauważyłem, SHOW PROCESSLIST;że istnieje duża liczba bardzo uśpionych połączeń, które są bardzo stare.

wprowadź opis zdjęcia tutaj Jaki powinien być czas połączenia, zanim połączenie powinno zostać zerwane?

Jak ustawić limit czasu w MySQL 5.0.51a-3ubuntu5.4?

Uwaga:

Korzystam z PHP 5.2.xi frameworka symfony 1.2.

Patrick
źródło
Szczegółowy blog: sforsuresh.in/how-to-delete-sleeping-processes-in-mysql
Suresh Kamrushi

Odpowiedzi:

53

mysqld przekroczy limit czasu połączeń z bazą danych na podstawie dwóch opcji serwera:

Oba mają domyślnie 28 800 sekund (8 godzin).

Możesz ustawić te opcje w /etc/my.cnf

Jeśli twoje połączenia są trwałe (otwarte przez mysql_pconnect), możesz obniżyć te liczby do rozsądnych wartości, takich jak 600 (10 minut) lub nawet 60 (1 minuta). Lub, jeśli aplikacja działa dobrze, możesz pozostawić domyślną. To zależy od Ciebie.

Musisz ustawić je w następujący sposób my.cnf(zaczyna obowiązywać po mysqldponownym uruchomieniu):

[mysqld]
interactive_timeout=180
wait_timeout=180

Jeśli nie chcesz ponownie uruchamiać mysql, uruchom następujące dwa polecenia:

SET GLOBAL interactive_timeout = 180;
SET GLOBAL wait_timeout = 180;

Nie spowoduje to zamknięcia już otwartych połączeń. Spowoduje to zamknięcie nowych połączeń za 180 sekund.

RolandoMySQLDBA
źródło
więc w /etc/my.cnf po prostu wstawiłbym wait_timeout=180?
Patrick
@Patrick Tak, ale musisz ustawić zarówno czas interaktywny, jak i czas oczekiwania na 180. Zaktualizowałem odpowiedź na twoją odpowiedź.
RolandoMySQLDBA
Ten plik może znajdować się w innym miejscu dev.mysql.com/doc/refman/5.1/en/option-files.html, a tych opcji nie można wyjaśnić (napisz je samodzielnie)
nicolallias