Мой сервер продолжает вылетать из-за ошибок OOM, вызванных MySQL. Я убежден, что на этом сайте есть неправильный запрос, который слишком длинный и вызывает эту проблему. Журналы моего сервера и MySQL показывают очень небольшую нагрузку, пока не произойдет всплеск и проблема. Мне очень, очень хотелось бы определить этот проблемный запрос и исправить его. Мне кажется, что mysql настраивает в остальном хороший производственный сервер, чтобы выжить при плохом запросе, который я все равно хочу удалить, - это странный способ сделать это.
У меня настроены медленные журналы запросов, но этот проблемный запрос никогда не отображается в журнале, я полагаю, поскольку запрос никогда не завершается, сначала происходит сбой сервера. Как я могу зарегистрировать или определить этот проблемный запрос?
К вашему сведению. На этом сайте были и другие запросы, которые вызвали эту проблему, и я их идентифицировал и исправил. Обычно это происходило из-за таких предложений, как «BETWEEN :: startTime AND :: endTime», и по ошибке :: startTime был установлен в 0, что делало временной интервал огромным.
Мне посоветовали использовать EXPLAIN, и я понимаю, проблема в том, что я не знаю, какой запрос «EXPLAIN» :).
Будем признательны за любые предложения о том, как я могу идентифицировать этот запрос. Спасибо!
Чтобы дополнить другие ответы, я бы указал на Набор инструментов Percona это мой инструмент №1 для анализа производительности MySQL. Пожалуйста, посмотрите на pt-запрос-дайджест
У меня есть для вас безумное предложение.
Я написал сообщение в DBA StackExchange, чтобы опросить список процессов и назвать 20 запросов с наихудшей производительностью за любой выбранный вами интервал.. Это лучше, чем журнал медленных запросов, потому что в журнал медленных запросов будут записываться только завершенные запросы. Мой метод будет ловить текущие запросы в действии.
Я реализовал это где-то в середине прошлого года на основе этого видео на YouTube.
Я создал инструмент pt-stalk в Percona Toolkit, чтобы помочь диагностировать проблемы, которые возникают, когда вы не смотрите. Это не только поможет вам отловить проблемный запрос, но и соберет достаточно информации, чтобы вы могли определить, является ли запрос проблемой, а если нет, то что еще может быть.