Почему резко поднимается Threads connected при слабом росте нагрузки?
Почему может резко подниматься Threads connected до 4 тысяч (лимит) с 50-100 при слабом росте нагрузки? Почему при слабом росте количества запросов (10-15%) может резко взлетать Threads connected? Мне думается, что сервер упирается в какие-то лимиты диска или подобное, но как это понять, куда стоит смотреть? В логе ошибок mysql в такие моменты ничего не попадет кроме уведомлений Aborted connection .. (Got timeout reading communication packets)
Почему при слабом росте количества запросов (10-15%) может резко взлетать Threads connected?
Кол-во запросов почти не связано с нагрузкой. Достаточно к 100 добавить один тяжелый запрос, и нагрузка подскочит в 10-100 раз.
Поэтому: включите slow query log, потом репорт по нему, читайте и оптимизируйте.
Мониторинг на уровне линукс поможет, но почти уверен, что в slow query log должно быть что-то заметно.
Если есть мониторинг (типа Zabbix и т.п.) хорошо добавить граф https://dev.mysql.com/doc/refman/8.0/en/server-sta... по моему опыту во всех случаях есть корреляция.
Vitaly Karasik, нет, в том-то и дело что туда запросы не попадают, даже если они медленные. Я сделал обычный тайминг microtime - microtime между запросами, там бывает по 10-40 секунд (лог включён на более 2), и они туда не попадают
Vitaly Karasik, уменьшил, попадают обычные запросы UPDATE `users` SET `points` = `points` + 1 WHERE `id` = 4457143; периодически. В целом есть ещё такая особенность, что этих запросов может быть сотни и тысячи в минуту, но почему именно падение происходит в секунду, а не просто потихоньку всё подвисает и подвисает?
egoranisimov,
Посмотрел все, выглядит странно.
- А сколько у вас памяти? Вывод free в чем? Swap выглядит занятым, но память вроде свободна
- Жалко, что граф disk I/O не рисуется
А в целом у меня осталась последняя идея - запустить cron и сохранять processlist - может это поможет понять что происходит во время пиков. Что-то типа
*/5 * * * * echo "show full processlist" | mysql >> /tmp/processlist.out