Назад | Перейти на главную страницу

регистрировать медленные запросы, убитые до завершения

По-видимому, один из моих коллег убил веб-сервер, который заставлял MySQL зависать (блокировал другие запросы), а не убивал конкретный запрос, и он проявил особую осторожность, чтобы забыть какие-либо подробности о запросе, который блокировал остальные. Хотел бы я сказать, что это произошло впервые, но это происходит примерно каждые 2-4 месяца (нерегулярные интервалы, к сожалению, информации нет), и мне бы очень хотелось иметь возможность регистрировать запросы, занимающие очень много времени, будь то они полные или нет.

Теперь для успешных запросов у нас есть отлично работающий журнал медленных запросов, но он попадает туда только по завершении, а не в случае его уничтожения во время запроса. Есть ли встроенное решение для регистрации запросов, пока они еще выполняются? На данный момент я прибегаю к запуску демона / скрипта, запрашивающего это каждые 10 секунд:

SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST 
WHERE TIME > 30 
AND USER != 'replication'
AND USER != 'system user'
AND USER != 'DELAYED'
AND COMMAND != 'Sleep'
AND ID != CONNECTION_ID();

... но это кажется хакерским, и мне интересно, есть ли встроенная возможность, которую я упустил?

Пытаться pt-query-digest --processlist h=host1 --print --no-report как описано Вот. Я никогда не пробовал делать дайджест на живом сервере и использовал его только для обработки существующего журнала медленной работы, но, похоже, это инструмент, который вам нужен. Вам нужно будет установить Percona Toolkit.

Хотя это предполагает использование второго программного обеспечения (хотя и от того же поставщика), вам следует подумать о том, чтобы поставить Прокси MySQL перед вашим сервером и с использованием его очень широких возможностей для регистрации времени начала и окончания запросов, даже если они отменены сервером.