Назад | Перейти на главную страницу

Добавить вызывающий php-скрипт в mysql-slow.log

Если включить строку

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. Или обратитесь к разработчику, который с ним знаком.