Почему мой mysql slow_query_log пуст?
У меня есть следующие настройки на производственном компьютере:
MySQL сервер 5.5.19
активный (проверил строку ps) my.cnf содержит:
slow_query_log
slow_query_log_file =/opt/app/mysql/log/mysqld-slow.log
long_query_time = 1
general_log = OFF
general_log_file =/opt/app/mysql/log/mysqld.log
log-queries-not-using-indexes
mysql> ПОКАЗАТЬ ПЕРЕМЕННЫЕ НРАВИТСЯ "log%"; -> показывает "log_queries_not_using_indexes=ON" и "log_slow_queries=ON"
Файл /opt/app/mysql/log/mysqld-slow.log существует, принадлежит mysql и имеет нулевую длину.
Проблема в том, что на тестовой машине мы заполняли журнал запросов очень быстро из-за опции log-query-not-using-indexes. Мы отключили его, потому что оно все равно было нужно. Теперь мы просто начали работать с нашей производственной базой данных и хотели, чтобы с нами не произошло ничего подобного, и нашли ту же настройку, но журнал пуст. Мы не можем просто перезапустить mysqld и поиграть, потому что мы сейчас живы. Я просто хочу понять, почему журнал пуст, хотя конфиг, кажется, указывает, что он должен регистрировать лоты запросов. Общее выполнение приложения на рабочих и тестовых серверах идентично, поэтому очень маловероятно, что не будет никаких неиндексированных запросов.
Итак, вопрос: какую другую конфигурацию я могу проверить, чтобы понять, почему ничего не регистрируется? Я не хочу, чтобы он регистрировался, я просто хочу быть уверенным, что он не запустится внезапно, как сумасшедший, если по какой-то причине сервер БД будет перезапущен. Я знаю, что мог бы добиться этого, просто удалив опцию из my.cnf, но я также хотел бы понять, почему сейчас она не регистрируется.
Спасибо Итан
2 ответа
Возможно, у вас просто нет запросов длительностью более 1 секунды.
Вы можете выполнить запрос как SELECT SLEEP(10)
, так что это будет обязательно дольше, чем long_query_time
и будет зарегистрирован.
Также возможно, что запросы записываются в файл, но у вас есть старый файл журнала. Таким образом, сервер все еще выполняет запись в диссоциированный дескриптор файла. Вы можете подтвердить это с помощью lsof
,
Вы можете принудительно закрыть сервер и снова открыть файл журнала, не требуя перезапуска mysqld. Это оставит диссоциированный файл. Вы можете сделать это одним из двух способов: FLUSH LOGS
или установить глобальную переменную slow_query_log=0
затем slow_query_log=1
,
В версии MySQL 5.0 произошли некоторые серьезные изменения в производительности журналов.
Ведение журнала контролируется переменной log-output. Знать NONE
означает отсутствие регистрации в целом. Вы можете проверить значение этой переменной следующим образом:
mysql> SHOW VARIABLES LIKE "log_output";
В вашем случае вам нужна медленная регистрация в файле, поэтому вы можете сделать что-то вроде:
mysql> SET GLOBAL log_output=FILE;
mysql> SET GLOBAL slow_query_log=ON;