Скільки часу "занадто довго" для сну MySQL Connections?


38

Я зайшов на свій сервер, щоб перевірити стан бази даних, і помітив, SHOW PROCESSLIST;що існує велика кількість сплячих зв’язків, які дуже давні.

введіть тут опис зображення Якою тривалістю має бути обмеження часу з'єднання, перш ніж з'єднання повинно бути припинене?

Як встановити обмеження в MySQL 5.0.51a-3ubuntu5.4?

Примітка:

Я використовую PHP 5.2.x та symfony Framework 1.2.


Відповіді:


53

mysqld здійснить тайм-аут підключення до бази даних на основі двох варіантів сервера:

Обидва за замовчуванням займають 28 800 секунд (8 годин).

Ви можете встановити ці параметри в /etc/my.cnf

Якщо ваші зв’язки стійкі (відкриваються через mysql_pconnect), ви можете знизити ці цифри до чогось розумного, наприклад, 600 (10 хвилин) або навіть 60 (1 хвилина). Або якщо ваш додаток працює чудово, ви можете залишити за замовчуванням. Це залежить від вас.

Ви повинні встановити наступне в my.cnf(набуває чинності після mysqldперезавантаження):

[mysqld]
interactive_timeout=180
wait_timeout=180

Якщо ви не хочете перезапустити mysql, виконайте ці дві команди:

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

Це не закриє вже відкриті з'єднання. Це призведе до закриття нових з’єднань за 180 секунд.


так що в /etc/my.cnf я б просто поставив wait_timeout=180?
Патрік

@Patrick Так, але вам потрібно встановити як interactive_timeout, так і wait_timeout на 180. Я оновив свою відповідь на вашу відповідь.
RolandoMySQLDBA

Цей файл може бути в іншому місці dev.mysql.com/doc/refman/5.1/uk/option-files.html, і ці параметри можуть не бути розкритими (напишіть їх самі)
nicolallias
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.