@Soniked

Можно ли реагировать на нагрузку mysql в реальном времени?

Есть сервер с рядом процессов, общающихся с несколькими сервисами по API
Периодически некоторые сервисы падают и процессы уходят в какое-то непонятное зацикливание, которое я не могу отследить - начинают читать базу в неадекватных объемах (гигабайты в минуту), из-за чего хостер VDS включает троттлинг и сервер на несколько минут практически отваливается - никакие процессы нормально не выполняются, подключиться к серверу невозможно и отследить активность в реальном времени не представляется возможным.

Я пробовал включать лог медленных запросов, но в логах +/- стандартные запросы (не считая неизвестно откуда взявшихся "SET NAMES 'utf8mb4' COLLATE 'utf8mb4_general_ci';").

Можно ли как-то реагировать не аномальное возрастание нагрузки на mysql от конкретных процессов или превышение определённого порога нагрузки и перезапускать этот процесс? По логам процесса я уже постараюсь понять, что конкретно происходило в момент сбоя и непосредственно перед ним, чтобы устранить баг в коде.
  • Вопрос задан
  • 180 просмотров
Пригласить эксперта
Ответы на вопрос 4
mayton2019
@mayton2019
Bigdata Engineer
Проблему надо искать не в MySQL а в прикладном коде который эту нагрузку создает. Я так понимаю что это либо PHP либо Python либо Node приложение. Смотрите какой там размер пула коннектов. Допустим 20. Сделайте 10 и повторите наблюдение.

Есть шаблоны ограничения нагрузки такие как Cirquit Breaker. Почитайте в этом направлении.

Я пробовал включать лог медленных запросов

Медленных может не быть. Если допустим это крупный магазин - то он может создавать тысячи мелких запросов которые в общей своей массе создают нагрузку но в категорию медленных все равно не заходят.

хостер VDS включает троттлинг

Это очень плохо. Зачем такой хостинг нужен. Это искажает картину анализа происходящего.
Найдите другой хостинг. Или не покупайте виртуалки. Купите сразу MySQL как услугу. Может
это будет дешевле стоить и обслуживаться проще.

Можно ли как-то реагировать не аномальное возрастание нагрузки на mysql

Реагировать должно само приложение. Разговаривайте с разработчиками. Они знают что за
SQL запросы работают и у них диапазон возможностей гораздо шире. Пусть кешируют. Пусть
больше логики переносят на приложение.

Админ или девопс конешно может написать баш-скрипты которые отстреливают процессы,
но какая с этого польза для бизнеса? Задача делается как раз для предоставления
услуги
. Вот надо и в этом направлении работать.
Ответ написан
Комментировать
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Вам именно BASH? Можно и BASH, что-нибудь типа echo "SHOW PROCESSLIST;" |mysql, и вуаля!
Докидываете параметров по вкусу, парсите список исполняющихся запросов (есть вкусный параметр Time - время выполнения), и делаете с этим списком всё что заблагорассудится... А что вам благорассудится?
Ответ написан
Да. "реагировать на нагрузку" можно по-разному:
1. слать сообщения админу в 2 часа ночи: "ой, у вас что-то непонятное творится с вашей СУБД. Может, проверишь?". Можно и разработчикам ПО.
2. можно и активно (программно). Например : "так, что тут количеством соединений? Ого! Надо грохнуть эти подозрительные процессы." или типа "давай остановим наше ПО и посмотрим что будет". Есть и более продвинутые средства, конечно. Искать по PMM mysql и другие.
3. ничего не делать и молча наблюдать за происходящим через средства мониторинга СУБД.
Ответ написан
Комментировать
veshetu
@veshetu
web-dev
утилита mytop
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы