Добавить вызывающий 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-скрипта в этот журнал?
Или, может быть, каким-то образом объединить различные журналы как-то в сценарии анализа, который выяснит, какой сценарий был вызван в то время, когда вызывался медленный запрос?
2 ответа
MySQL не может узнать, какой PHP-скрипт запущен. Все, что он знает, это то, что он получил соединение от имени пользователя, пароля, хоста, и ему был задан какой-то запрос. Таким образом, это регистрирует, что это имеет в наличии.
Если вы разработчик, вы должны быть достаточно знакомы с вашим приложением, чтобы найти код, выполняющий запрос, в течение нескольких секунд. Если вы не разработчик или не знакомы с приложением, попробуйте grep
, Или свяжитесь с разработчиком, который знаком с этим.
Вы можете добавить комментарий к своим запросам, и это сделает всю работу:
SELECT * FROM table # php file ./path/to/file.php