Мы пытаемся выполнить некоторую отладку производительности сервера, и я хотел бы сделать снимок запросов, выполняемых на нашем сервере MySQL в течение пары минут.
Я знаком с MySQL SHOW FULL PROCESSLIST
, однако я хотел бы иметь возможность запускать это через командную строку, чтобы я мог записать его в файл и обработать его.
Есть ли способ вывести этот запрос в файл и запускать его каждую секунду или около того?
Есть ли лучший способ перехватить все запросы?
Обратите внимание, что меня не интересуют только медленные запросы (я знаком с медленным журналом запросов).
echo show full processlist | mysql
или лучшеSELECT info FROM information_schema.processlist WHERE Command="Query" AND User!="root"
использовать цикл в bash. Добавьте пару строк , и вы получите такую же функциональность запросов , чемinnotop
илиpt-kill
Ответы:
Я бы использовал медленный журнал запросов. Он фиксирует все запросы, а не только медленные, если вы установили long_query_time = 0.
Он также захватывает ВСЕ запросы, что не относится к упомянутым здесь методам TCP-сниффинга; те не будут захватывать запросы, выполненные через сокет. То же самое для просмотра SHOW PROCESSLIST; вы пропустите быстрые запросы.
Если вы хотите захватывать запросы через список процессов или через трафик TCP, я бы предложил использовать pt-query-digest Percona Toolkit. Он может опрашивать список процессов для вас (и иметь смысл из результатов, что очень трудно сделать, если вы сами собираете несколько примеров), и он может интерпретировать TCP-протокол MySQL, так что вы можете получить некоторые TCP трафика и проанализировать его. Конечно, это также лучший агрегатор запросов / профилировщик / репортер, когда-либо написанный, но вы не сказали, что хотите делать с запросами после их захвата.
источник
Самый надежный способ - использовать «общий журнал запросов», который будет захватывать все запросы: http://dev.mysql.com/doc/refman/5.1/en/query-log.html.
Вы не указываете версию сервера MySQL, но если у вас есть 5.1.12 или более поздняя версия, вы можете включить или отключить ее с помощью глобальной переменной через SQL; см. документацию для деталей.
источник
Попробуйте эту команду как root (или используйте
sudo
):Найдено http://www.mysqlperformanceblog.com/2008/11/07/poor-mans-query-logging/
источник
Конечно:
ура
источник
Это может быть место для Mysql Proxy . Это в основном позволяет вам захватывать (и манипулировать) отправляемые запросы. Базовая установка для перехвата довольно проста. Затем просто измените конфигурацию клиента так, чтобы он указывал на прокси, чтобы вы могли перехватывать все запросы.
источник
Терминальная программа Wireshark tshark может помочь:
sudo yum install wireshark
даст вам tshark на Amazon Linux иsudo apt-get install tshark
даст вам tshark на Ubuntu 14+источник
Я использовал решение Руи Педро Бернардино. Прекрасно работает, за исключением того, что я изменил пару вещей в первой строке, как описано ниже ...
источник
Захватывайте mysql tcp сессии, используя tcpdump, как запросы, так и ответы. Вы можете проанализировать дамп, например, используя инструменты maatkit:
http://www.maatkit.org/doc/mk-tcp-model.html
http://www.maatkit.org/doc/mk-query-digest.html
источник
Я искал и искал, и, наконец, я приземлился в MONyog для мониторинга всех запросов в реальном времени, которые выполняются на сервере MySQL. Единственное, что следует отметить, это таблицы «Performance_schema» и «Statement_digest», и Performance_schema доступно с MySQL 5.6.14 и выше.
источник