Próbujemy przeprowadzić debugowanie wydajności serwera i chciałbym uchwycić migawkę zapytań uruchamianych na naszym serwerze MySQL w ciągu kilku minut.
Znam MySQL SHOW FULL PROCESSLIST
, jednak chciałbym móc uruchomić to za pomocą wiersza poleceń, aby móc zrzucić go do pliku i przetworzyć.
Czy istnieje sposób na wyprowadzenie tego zapytania do pliku i uruchamianie go co sekundę?
Czy istnieje lepszy sposób na przechwycenie wszystkich uruchomionych zapytań?
Zauważ, że nie interesują mnie tylko powolne zapytania (znam powolny dziennik zapytań).
echo show full processlist | mysql
lub lepiejSELECT info FROM information_schema.processlist WHERE Command="Query" AND User!="root"
w pętli w bash. Dodać kilka wierszy i dostaniesz taką samą funkcjonalność zapytań niżinnotop
lubpt-kill
Odpowiedzi:
Chciałbym użyć dziennika powolnych zapytań. Przechwytuje wszystkie zapytania, nie tylko te, które są wolne, jeśli ustawisz long_query_time = 0.
Przechwytuje również WSZYSTKIE zapytania, co nie jest prawdą w przypadku wspomnianych tutaj technik podsłuchu TCP; nie przechwycą one zapytań wykonanych przez gniazdo. To samo dotyczy oglądania SHOW PROCESSLIST; przegapisz szybko działające zapytania.
Jeśli chcesz przechwytywać zapytania za pośrednictwem listy procesów lub ruchu TCP, sugerowałbym użycie Per -ona-Toolkit-pt-query-digest. Może sondować listę procesów dla Ciebie (i mieć sens z wyników, co jest bardzo trudne, jeśli sam przechwytujesz kilka próbek), a także może interpretować protokół TCP MySQL, abyś mógł pobrać trochę TCP ruch i analizuj go. Oczywiście jest to również najlepszy agregator zapytań / profiler / reporter, jaki kiedykolwiek napisano, ale nie powiedziałeś, co chcesz zrobić z zapytaniami po ich przechwyceniu.
źródło
Najsolidniejszym sposobem byłoby użycie „ogólnego dziennika zapytań”, który przechwytuje wszystkie zapytania: http://dev.mysql.com/doc/refman/5.1/en/query-log.html
Nie określasz wersji serwera MySQL, ale jeśli masz wersję 5.1.12 lub nowszą, możesz ją włączać i wyłączać za pomocą zmiennej globalnej za pomocą SQL; szczegóły w dokumentacji.
źródło
Wypróbuj to polecenie jako root (lub użyj
sudo
):Znaleziono http://www.mysqlperformanceblog.com/2008/11/07/poor-mans-query-logging/
źródło
Pewnie:
Twoje zdrowie
źródło
To może być miejsce dla serwera proxy MySQL . Zasadniczo umożliwia przechwytywanie (i manipulowanie) wysyłanych zapytań. Podstawowa konfiguracja przechwytywania jest dość łatwa. Następnie wystarczy zmienić konfigurację klienta, aby wskazywała na serwer proxy, aby można było przechwytywać wszystkie żądania.
źródło
Program tshark oparty na terminalach może pomóc:
sudo yum install wireshark
da tshark na Amazon Linux isudo apt-get install tshark
da tshark na Ubuntu 14+źródło
Użyłem rozwiązania „Rui Pedro Bernardino”. Działa świetnie, ale zmieniłem kilka rzeczy w pierwszej linii, jak wyszczególniono poniżej ...
źródło
Przechwytuj sesje mysql tcp za pomocą tcpdump, zarówno zapytań, jak i odpowiedzi. Możesz przeanalizować zrzut na przykład za pomocą narzędzi maatkit:
http://www.maatkit.org/doc/mk-tcp-model.html
http://www.maatkit.org/doc/mk-query-digest.html
źródło
Szukałem i szukałem, aż w końcu wylądowałem w MONyogu, aby monitorować wszystkie zapytania w czasie rzeczywistym, które są wykonywane na serwerze mysql. Jedyną rzeczą, na którą należy zwrócić uwagę, jest włączenie tabeli „Performance_schema” i „statement_digest” i Performance_schema to dostępne z MySQL 5.6.14 i nowszymi.
źródło