
Показать MySQL процессы в Unix/Linux
Завалялась у меня в черновиках очередная заметка «Показать MySQL процессы в Unix/Linux». В ней я расскажу как работать с MySQL процессами в Unix/Linux.
Показать ВСЕ MySQL процессы в Unix/Linux
Чтобы посмотреть список процессов, используйте:
> SHOW PROCESSLIST;
Чтобы посмотреть полный список процессов, используйте команду:
> SHOW FULL PROCESSLIST;
Так же, можно данный вывод перенаправить в файл для дальнейшего использования:
# mysql -e "show full processlist\G" > /root/processlist.txt
Очень удобно использовать еще сторонние утилиты в сочетании «show full processlist».
Чтобы посчитать количество всех соединений используйте:
# mysql -e "show full processlist\G"| grep -E "Command:"| wc -l
Или показать количество слипов:
# mysql -e "show full processlist\G"| grep -E "Command:"|grep -i "sleep"| wc -l
Или количество соединений без слипов:
# mysql -e "show full processlist\G"| grep -E "Command:"|grep -iv "sleep"| wc -l
Как то так 🙂
Показать MySQL процессы без sleep соединений в Unix/Linux
К сожалению, SHOW PROCESSLIST не позволяет использовать фильтры. По этому, можно сделать «ход конем», следующая команда покажет все соединения без sleep-ов:
> SELECT * FROM information_schema.processlist WHERE command != 'Sleep' ORDER BY id;
Вот еще один вариант:
> SELECT user, time, state, info FROM information_schema.processlist WHERE command != 'Sleep' ORDER BY time DESC, id;
Посмотрим соединения которые занимают некоторое время, например меньше 2 секунд:
> SELECT user, time, state, info FROM information_schema.processlist WHERE command != 'Sleep' AND time >= 2 ORDER BY time DESC, id;
Подсказка:
При больших данных лучше всего использовать вертикальный вывод, и для этого служит «\G» опция в конце строки, за место символа «;», вот пример:
> SELECT user, time, state, info FROM information_schema.processlist WHERE command != 'Sleep' AND time >= 2 ORDER BY time DESC, id \G
Существует альтернатива, чтобы скрыть все Sleep процессы в MYSQL PROCESSLIST:
Если у вас есть много подключений к MySQL или MariaDB (как у меня) вы можете отфильтровать список, который вы видите при запуске SHOW PROCESSLIST. Чтобы скрыть все Sleep процессы, вы можете просто использовать grep:
\P grep -v "| Sleep"
Вот и все.
Показать MySQL процессы sleep соединения в Unix/Linux
К сожалению, SHOW PROCESSLIST не позволяет использовать фильтры. По этому, можно сделать «ход конем», следующая команда покажет все соединения без sleep-ов:
> SELECT * FROM information_schema.processlist WHERE command = 'Sleep' ORDER BY id;
Вот еще один вариант:
> SELECT user, time, state, info FROM information_schema.processlist WHERE command = 'Sleep' ORDER BY time DESC, id;
Посмотрим соединения которые занимают некоторое время, например меньше 2 секунд:
> SELECT user, time, state, info FROM information_schema.processlist WHERE command = 'Sleep' AND time >= 2 ORDER BY time DESC, id;
Подсказка:
При больших данных лучше всего использовать вертикальный вывод, и для этого служит «\G» опция в конце строки, за место символа «;», вот пример:
> SELECT user, time, state, info FROM information_schema.processlist WHERE command = 'Sleep' AND time >= 2 ORDER BY time DESC, id \G
Существует альтернатива, чтобы скрыть все Sleep процессы в MYSQL PROCESSLIST:
Если у вас есть много подключений к MySQL или MariaDB (как у меня) вы можете отфильтровать список, который вы видите при запуске SHOW PROCESSLIST. Чтобы скрыть все Sleep процессы, вы можете просто использовать grep:
\P grep "| Sleep"
Вот и все.
Работа с процессами MySQL в Unix/Linux
Мною был написан плагин для мониторинга sleep соединений через Nagios:
Плагин для мониторинга sleep соединений в mysql для Nagios
Обычно их не нужно мониторить, а нужно сбрасывать по заданной переменной или завершать:
Завершить все sleep соединения в MySQL
Тема «Показать MySQL процессы в Unix/Linux» завершена.