У меня есть сервер MySql с двумя активными базами данных, которые используются для веб-приложения, и тремя неактивными (оставлены для архивирования, но в настоящее время не используются). Проблема в том, что на сервере выполняется ненормальное количество запросов. Например, я бы перезапустил сервер, и в течение минуты число заданных запросов увеличилось бы до 800 - и тогда оно никогда не опустится ниже 6 запросов в секунду.
Чтобы проверить это дальше, я удалил всех пользователей базы данных из активных и неактивных баз данных, чтобы пользователи веб-приложений не могли подключиться к серверу. Удаленное подключение к серверу также отключено. Единственным оставшимся пользователем базы данных, связанным с сервером, был пользователь PHPMyadmin. Я оставил систему в этом состоянии, так что «настоящие запросы» не могут быть сгенерированы, и теперь у меня есть следующие данные:
Сетевой трафик с момента запуска: 535 Мбайт
Этот сервер MySQL работает 0 дней, 14 часов, 41 минуту и 26 секунд.
Вопросов с момента запуска: 31 858 Документация ø в час: 2169 ø в минуту: 36
Пункты с красным флажком (Предупреждение):
Прерванные клиенты 2
Прервано подключение 1,1 k
Созданы tmp дисковые таблицы 48
Обработчик чтения rnd 17,9 тыс.
Обработчик прочитал и следующие 3 M
Буферный пул Innodb читает 9,1 КБ
Ключ читает 2,2 k
Открытых столов 757
Медленные запросы 56
Настольные замки ждали 5
Мои переменные сервера прилагается здесь
Журнал медленных запросов показывает запросы, которые мы никогда не писали в нашем веб-приложении, например:
SELECT /*!4001 SQL_NO_CACHE/* * FROM <tablename>
для каждой таблицы в каждой базе данных и кучу больших запросов на объединение с пометкой «Отправляет запрос», «Откладывает запрос», «Запрос SMTP» и т. д.
Мой вопрос в том, как мой сервер генерирует так много запросов без подключения к настоящему пользователю? Это нормально? Что я могу сделать, чтобы это улучшить?
Прошло некоторое время с тех пор, как этот вопрос был задан, но в случае, если он будет полезен для всех, кто с ним столкнется, можно попробовать включить общий журнал запросов, чтобы увидеть все выполняемые запросы (см. http://dev.mysql.com/doc/refman/5.5/en/query-log.html) и посмотрите, знакомы ли они. Если вы не узнаете запросы, вы можете попробовать выполнить рекурсивную команду grep для частей некоторых запросов, чтобы найти код / скрипт, в котором они находятся на сервере.
Вы уверены, что нет заданий cron, выполняющих какие-либо запросы к базе данных? Или ваш MySQL не настроен для использования своего планировщик событий?
События MySQL - это задачи, которые выполняются по расписанию. Поэтому мы иногда называем их запланированными мероприятиями. Когда вы создаете событие, вы создаете именованный объект базы данных, содержащий один или несколько операторов SQL, которые должны выполняться через один или несколько регулярных интервалов, начинающихся и заканчивающихся в определенные дату и время. Концептуально это похоже на идею crontab Unix (также известного как «задание cron») или планировщика задач Windows.