Сьогодні сайт знову застряг, і знайдено багато сну
Причини сну:
1 Клієнтська програма не викликала mysql_close() перед виходом.
2 Клієнт спав більше wait_timeout чи interactive_timeout секунд, не надсилаючи жодних запитів серверу.
3 Клієнтська програма раптово завершилася посеред передачі даних
Якщо кількість процесів сну за один період занадто велика, а загальна кількість з'єднань в інших станах перевищує значення max_connection, MySQL більше не може обробляти жодні запити, окрім кореневого користувача, не може встановити з'єднання з будь-яким запитом або зависає безпосередньо
Рішення:
1. По-перше, перевірте, чи використовує ваша програма метод pconnect, а по-друге, перевірте, чи викликається mysql_close() у часі до виконання сторінки. Намагайтеся не використовувати метод pconnect, тобто mysql_connect. Коли програма виконується, mysql_close має бути явно викликаний
2. Додай wait_timeout і interactive_timeout до my.cnf, встанови значення меншим, за замовчуванням значення wait_timeout — 8 годин, можна змінити на 1 годину або півгодини. Таким чином, mySQL швидше вбиватиме мертві з'єднання. Запобігайте перевищенню загальної кількості з'єднань max_connection значення.
wait_timeout занадто великий розмір призведе до вчасного випуску великої кількості SLEEP процесів у MySQL, що знижує продуктивність системи, але якщо налаштування занадто малі, можуть виникнути проблеми на кшталт «MySQL зник».
Встановіть значення max_connection на вище, але це, очевидно, недоречно — чим більше у вас підключень, тим більше навантаження це створює на сервер. Насправді ці зв'язки є зайвими, і припинити їх якомога швидше — найкраща політика.
3. Проаналізуйте SQL запити системи крок за кроком, знайдіть SQL, який надто повільний, і оптимізуйте його
1)interactive_timeout: Значення параметра: кількість секунд, протягом яких сервер чекає на активність перед вимкненням інтерактивного з'єднання. Інтерактивний клієнт визначається як клієнт, який використовує CLIENT_INTERACTIVE опцію у mysql_real_connect(). Параметр за замовчуванням: 28800 секунд (8 годин)
(2)wait_timeout: Значення параметра: Кількість секунд, протягом яких сервер чекає на активність перед закриттям неінтерактивного з'єднання. Коли потік починається, значення сесійного wait_timeout ініціалізується на основі глобального wait_timeout або глобального значення interactive_timeout, залежно від типу клієнта (визначеного CLIENT_INTERACTIVE варіантів з'єднання mysql_real_connect()). Параметр за замовчуванням: 28800 секунд (8 годин)
Існує верхня межа максимальної кількості з'єднань, які MySQL Server може підтримувати, оскільки кожне з'єднання встановлене і споживає пам'ять, тому ми очікуємо, що клієнти відключатимуть і звільнять зайняту пам'ять після підключення до MySQL Server для виконання відповідної операції. Якщо у вашого MySQL Server багато неактивних з'єднань, вони не лише марно споживають пам'ять, а й якщо з'єднання продовжуватимуть накопичуватися та відкриватися, вони зрештою досягнуть максимальної кількості з'єднань у MySQL Server, що повідомить про помилку «занадто багато з'єднань». Встановлення значення wait_timeout слід оцінювати відповідно до роботи системи. Після того, як система працює певний час, ви можете перевірити статус підключення поточної системи за допомогою команди show processlist; якщо ви знайдете велику кількість підключених процесів у режимі сну, це означає, що параметри занадто великі, і ви можете внести відповідні коригування, щоб зробити менші коригування.
SQL-команда:
Цей метод модифікації полягає уПісля перезапуску сервісу mysql він стане недійсним, тому найкраще налаштувати ці дві властивості у файлі конфігурації MySQL.
Змініть файл my.cnf під Linux:
|