Но чтобы найти медленный запрос, требуется либо обратиться за помощью к CMS (это лучший вариант, если в CMS есть такая функция). Либо включить отладчик на PHP или написать свой измеритель времени выполнения. Но есть и другой способ. Можно посмотреть очередь запросов в MySQL напрямую. Для этого следует лишь выполнить в SQL консоли запрос:
SELECT * FROM information_schema.processlist;
Учитывая что запросы от сайта к базе данных выполняются за доли секунд, придётся много раз выполнять эту команду, в надежде поймать "тормозящую" операцию. Делать это вручную утомительно, но можно воспользоваться утилитой "mysqladmin". Её необходимо запустить с несколькими параметрами из консоли сервера, чтобы она раз в секунду сама показывала список очереди MySQL. Команда будет выглядеть так:
mysqladmin -h ip_адрес -P порт -u польз --verbose -p -i 1 processlist
Рассмотрим ключи в этой команде:
- -h - ip адрес сервера (хоста) с базой данных. По умолчанию "localhost". В команде нужно заменить "ip_адрес" на ip адрес.
- -P - порт базы данных. По умолчанию "3306". В команде нужно заменить "порт" на число.
- -u - имя пользователя базы данных. По умолчанию "root". В команде нужно заменить "польз" на логин.
- -p - запоминает введённый пароль.
- -i - интервал в секундах между запросами.
- --verbose - показать полную информацию о запросе. Иначе SQL строка запроса будет обрезаться, чтобы таблица вошла в терминал по ширине.
- id запроса
- Имя пользователя
- Имя базы данных
- Хост (ip адрес)
- Тип команды
- Время исполнения
- SQL строку запроса
- Размер ответа
mysqladmin -h ip_адрес -P порт -u польз. kill id_запроса
В любом случае, даже при отображении очереди раз в секунду через mysqladmin, существует возможность не поймать с первого раза "тормозящий" запрос. Ведь длятся они меньше одной секунды. Поэтому придётся набраться терпения.