Откуда беруться Sleep-запросы
Sleep-запросы - соединения с базой, которые не закрылись, что приводит к достижению лимита подключения к MySQL - на шаге 6:
1. пользователь открывает страницу Вашего сайта
2. на сервер приходит запрос к Apache
3. Apache посылает запрос PHP
4. PHP подключается к MySQL
5. PHP направляет SQL-запрос в MySQL
6. MySQL выполняет запрос и отдает результат в PHP
7. PHP закрывает соединение с MySQL
8. PHP формирует контент и отдает его в Apache
9. Apache посылает ответ в браузер
Скрипт не завершает свою работу, и обычно причина:
- нехватка памяти. Решение: увеличиваем в биллинге в параметрах услуги;
- неправильная логика работы скрипта в результате которой получился бесконечный цикл.
Решение
Закрываем соединения по тайм-ауту с помощью параметров wait_timeout и interactive_timeout для текущей сессии. Пример:
<?php
mysql_connect('127.0.0.1:3351', 'root', '');
mysql_select_db('test');
mysql_query('set wait_timeout=1');
$result = mysql_query( 'SELECT * FROM table');
Есть и другие параметры:
+-------------+-----------+
| Variable_name | Value |
+-------------+-----------+
| connect_timeout | 10 |
| interactive_timeout | 28800 |
| net_read_timeout | 30 |
| net_write_timeout | 60 |
| wait_timeout | 28800 |
+------------+-----------+