Чи повинен я турбуватися про стан сну mysql у списку процесів


Відповіді:


17

Навіть наймогутнішим з нас іноді потрібно спати. Без сну можна занепокоїти, і безсоння може призвести до різного роду серйозних симптомів.

Більш серйозно: стан сну означає, що процес MySQL виконав із своїм запитом, але сторона клієнта ще не вийшла. Багато веб-додатків не очищають своїх зв’язків згодом, що призводить до сплячих процесів MySQL. Не хвилюйтеся, якщо їх є лише кілька; MySQL очистить їх після настроюваного періоду очікування (wait_timeout).

Або якщо ваш веб-додаток використовує стійкі з'єднання та об'єднання з'єднань, то цілком нормально мати навіть багато сплячих процесів: у такому випадку ваша програма просто відкриває, наприклад, 100 підключень SQL і тримає їх відкритими. Це зменшує розмикання / закриття підключення. Якщо ваша програма не дуже зайнята, нормально, що майже не кожен процес SQL має щось робити, тому вони сплять.


5

Ні, не хвилюйтеся за них, якщо у вас їх не тисячі. Зазвичай вони вказують на підключення до бази даних, яке наразі нічого не робить, але в іншому випадку все ще живе.

Багато веб-сайтів побудовані так, що на початку обробки сторінки відкривається підключення до бази даних, потім використовується протягом усього покоління сторінки та остаточно відкидається в кінці. Якщо відкидання виконано належним чином, з'єднання з базою даних закривається, і сервер потім перерве відповідний потік, що означає, що це з'єднання зникає зі списку процесів.

Якщо з'єднання не закрито, воно може залишатися в стані "SLEEP" до тих пір, поки його час не закінчиться. У такому випадку у вас може виникнути безліч сплячих процесів. але якщо ви не стикаєтеся з проблемами пам'яті на db-сервері, це теж не є великою проблемою.


3

Перш ніж збільшувати змінну max_connections, ви повинні перевірити, скільки у вас неінтерактивних з'єднань, запустивши команду show list list.

Якщо у вас багато підключення до сну, вам доведеться зменшити значення змінної "wait_timeout", щоб закрити неінтерактивне з'єднання після деякого очікування.

  • Щоб показати значення wait_timeout:
ПОКАЖИТИ ЗМІНУВАННЯ СЕСІЇ, ПОДОБАЮТЬ 'wait_timeout';

+ --------------- + ------- +
| Ім'я змінної | Значення |
+ --------------- + ------- +
| wait_timeout | 28800 |
+ --------------- + ------- +

значення в секунду, це означає, що неінтерактивне з'єднання все ще триває до 8 годин.

  • Щоб змінити значення змінної "wait_timeout":
SET сеанс wait_timeout = 600;
Запит OK, 0 рядків задіяно (0,00 сек)

Через 10 хвилин, якщо сплячий режим все ще спить, mysql або MariaDB припиняють це з'єднання.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.