Как я могу войти в "show processlist", когда есть больше чем n запросов? - PullRequest
5 голосов
/ 20 марта 2012

Наши процессы mysql могут иногда оставаться в резерве, и процессы начинают стоять в очереди.Я хотел бы отладить, когда и почему это происходит, регистрируя список процессов в медленное время.

Я хотел бы запустить show full processlist; через задание cron и сохранить вывод в текстовый файл, если их больше *Возвращено 1004 * строки.

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

Например:

echo "show full processlist;" | mysql -uroot > processlist-`date +%F-%H-%M`.log

Я хочу выполнить это только тогда, когда результат содержиттекст 50 rows in set (или больше 50 строк).

Ответы [ 2 ]

13 голосов
/ 20 марта 2012

pt-stalk предназначен именно для этой цели.Он производит выборку списка процессов каждую секунду (или в любое другое время, которое вы укажете), а затем, когда достигается пороговое значение (Threads_running является значением по умолчанию и в данном случае является тем, что вам нужно), собирает целый набор данных, включая активность диска, tcpdumps, множественныепримеры списка процессов, переменных состояния сервера, состояния мьютекса / innodb и нескольких других.

Вот как это запустить:

pt-stalk --daemonize --dest /var/lib/pt-stalk --collect-tcpdump --threshold 50 --cycles 1 --disk-pct-free 20 --retention-time 3 -- --defaults-file=/etc/percona-toolkit/pt-stalk_my.cnf

Приведенная выше команда будет пробовать Threads_running (--threshold; установите это значение на n ) каждую секунду (по умолчанию --interval) и запустите сбор данных, если Threads_running больше 50 для 1 последовательного образца (--cycles).3 дня (--retention-time) образцов будут храниться, и их сбор не будет производиться, если на диске будет свободно менее 20% (--disk-pct-free).В каждой коллекции будет выполняться tcpdump в формате pcap (--collect-tcpdump), который можно анализировать с помощью обычных инструментов tcpdump или ряда других инструментов Percona Toolkit, включая pt-query-digest и пт-ТСР-модель .Между выборками будет 5-минутный отдых (по умолчанию --sleep), чтобы предотвратить DoS'ы самостоятельно.Процесс будет демонизирован (--daemonize).Параметры после -- будут переданы всем командам mysql / mysqladmin, поэтому это хорошее место для установки таких вещей, как --defaults-file, где вы можете хранить свои учетные данные вдали от посторонних глаз.

4 голосов
/ 20 марта 2012

Прежде всего, убедитесь, что журнал медленных запросов MySQL - это не то, что вам нужно.Кроме того, параметр MySQL -e позволяет указывать запрос в командной строке.

Если перевернуть логику, это сохранит список процессов и удалит его, когда список процессов недостаточно длинный:

date=$(date +...) # set the desired date format here
[ $(mysql -uroot -e "show full processlist" | tee plist-$date.log | wc -l) -lt 51 ] && rm plist-$date.log
...