Если включить строку
log_slow_queries = /var/log/mysql/mysql-slow.log
в
/etc/my.cnf or /etc/mysql/my.cnf
тогда это будет регистрировать все запросы, которые занимают больше времени, чем настройка в long_query_time
.
На сервере с множеством размещенных веб-сайтов вы получите записи, которые показывают, какой хост и какое время вызвал, в форме, например:
# Time: 130508 0:04:07
# User@Host: dbuser[dbhost] @ localhost []
# Query_time: 9.354343 Lock_time: 0.000094 Rows_sent: 0 Rows_examined: 1
use database_name;
SET timestamp=1367964247;
UPDATE some_table SET something='some data'
но отсутствует самая важная информация: какой сценарий вызвал этот запрос? И несколько медленных запросов внутри одного и того же скрипта не складываются по времени, поэтому было бы неплохо провести анализ, который автоматически определяет имя скрипта.
Можно ли добавить в этот журнал имя PHP-скрипта?
Или, может быть, каким-то образом объединить разные журналы в сценарии анализа, который выяснит, какой сценарий был вызван в то время, когда был вызван медленный запрос?
MySQL не может узнать, какой PHP-скрипт был запущен. Все, что он знает, - это соединение от имени пользователя, пароля, хоста и его запрос. Таким образом, он регистрирует все, что у него есть.
Если вы разработчик, вы должны быть достаточно знакомы со своим приложением, чтобы найти код, выполняющий запрос, в течение нескольких секунд. Если вы не разработчик или не знакомы с приложением, попробуйте grep
. Или обратитесь к разработчику, который с ним знаком.