Имею ubuntu 14.04 и MariaDB 10.0.30.
В файле /etc/mysql/my.cnf настроил:
slow_query_log=1
slow_query_log_file = /var/log/mysql/mariadb-slow.log
long_query_time = 10
#log_slow_rate_limit = 1000
log_slow_verbosity = query_plan
Сервер работает уже давно, но файла /var/log/mysql/mariadb-slow.log по факту нет - может у меня нет медленных запросов?
Узнал на днях, что MySQL внутри имеет счётчик медленных запросов, который можно посмотреть командой
SHOW GLOBAL STATUS;
Вижу: Slow_queries 8878
Где все эти 8878 запросов? Почему нет лога?
На всякий случай решил проверить, применились ли настройки из my.cnf к серверу? Сделал запрос
show variables like '%slow%';
и внезапно вижу:
slow_query_log_file = master-slow.log
это совсем не то, что я настраивал! Почему?
Но и этого файла master-slow.log нет в папке /var/log/mysql/, может надо в какой-то другой папке искать?
В этой статье
https://mariadb.com/kb/en/mariadb/slow-query-log-o... прочитал про переменную log_output, которую нужно установить в значение "file", проверил с помощью запроса
SHOW VARIABLES LIKE '%log_output%';
- тут у меня всё верно log_output=FILE
Наконец, в той же статье указана настройка log_queries_not_using_indexes и в моём случае стоит OFF - видимо поэтому в логе ничего нет, т.к. все мои медленные запросы это именно запросы не использующие индексы? (
upd: это не так, читай дальше) Установил в ON командой
set global log_queries_not_using_indexes = 'ON'
, подождал, счётчик медленных запросов который я смотрю через
SHOW GLOBAL STATUS;
увеличился, но файлов master-slow.log и /var/log/mysql/mariadb-slow.log всё ещё нет!
Я запутался, куда копать дальше? Самый главный вопрос сейчас: почему в my.cnf я явно указал slow_query_log_file = /var/log/mysql/mariadb-slow.log, а запрос show variables like '%slow_query_log_file%'; показывает совсем другоезначение "master-slow.log"?
UPD спустя несколько дней
Спасибо за комментарии и подсказки ниже, провёл ряд дополнительных исследований:
0) выполнил команду на работающем сервере
set global slow_query_log_file = /var/log/mysql/mariadb-slow.log
и файл таки появился! Это сняло подозрения, что была проблема доступа к папке /var/log/mysql/. Но пока остался вопрос почему при старте сервера это же значение не берётся из my.cnf
1) внизу my.cnf есть строка
!includedir /etc/mysql/conf.d/
, я посмотрел что в папке /etc/mysql/conf.d/ - там три файла mariadb.cnf mysqld_safe_syslog.cnf tokudb.cnf, но внутри нет никаких затирающих настроек связанных с медленными запросами
2) моё предположение относительно
log_queries_not_using_indexes
, которое я написал выше оказалось не верно, проясняю ситуацию, чтобы другие не запутались прочитав этот эпос:
- медленные запросы записываются в лог вне зависимости от значения log_queries_not_using_indexes
- если включить log_queries_not_using_indexes=On, то в дополнение к медленным запросом в тот же лог файл будут записываться все запросы не использующие индексы (вне зависимости от времени их выполнения)