Недавно на одном из наших серверов закончилась память и произошел сбой. После просмотра munin
графики, похоже, что единственным показателем (кроме использования памяти), достигшим пика непосредственно перед сбоем, был MySQL throughput
. Однако мы ожидали увидеть соответствующее увеличение количества MySQL queries
чего не произошло:
Также на графике ниже вы можете видеть, что MySQL throughput
достигло аномально высокого значения, нигде не приближающегося к любому другому значению, достигнутому ранее:
Мы полностью в неведении относительно того, как нам следует действовать, отсюда и следующий вопрос:
Как провести «посмертное» исследование увеличения пропускной способности MySQL?
Запрос с огромным набором результатов вызовет такой всплеск, не увидев соответствующего увеличения количества запросов. Есть ли у вас мониторинг дискового ввода-вывода? Там тоже должен быть большой всплеск, если это было вызвано запросом.
К сожалению, патологоанатомическое исследование сложно без general_log
включен. В журнале ошибок не отображаются успешно выполненные запросы.
Забегая вперед, то, что я сделал, чтобы попытаться выявить эти проблемы, - это сохранить окно журналов запросов. включить general_log
и настройте logrotate, чтобы вести краткую историю запросов. Если это слишком затратно по производительности, вы также можете попробовать использовать такой инструмент, как mk-query-digest вместе с tcpdump для захвата запросов.