Mierzenie rzeczywistego czasu zapytań MySQL

79

Jak mogę zmierzyć czas wykonania zapytania bez mierzenia czasu spędzonego na oczekiwaniu na zwolnienie blokady itp.? Moim jedynym pomysłem było ciągłe mierzenie tego samego zapytania i rejestrowanie najszybszego czasu.

Michaił
źródło

Odpowiedzi:

149

Uruchom profilera z

SET profiling = 1;

Następnie wykonaj zapytanie.

Z

SHOW PROFILES;

zobaczysz listę zapytań, dla których profiler ma statystyki. Na koniec wybierasz, z którym zapytaniem chcesz się zapoznać

SHOW PROFILE FOR QUERY 1;

lub jakikolwiek numer ma twoje zapytanie.

Otrzymasz listę, na której dokładnie, ile czasu zostało spędzone podczas zapytania.

Więcej informacji w instrukcji.

wymyślne majtki
źródło
To jest doskonałe! Czy wiesz, czy to jest powolne? tj. czy mogę dodać to do mojej klasy opakowania, aby było wykonywane dla każdego zapytania uruchamianego w mojej witrynie?
Michaił
3
Nigdy o tym nie myślałem. Dlaczego chcesz to zrobić? Zwykle jest to tylko dla rozwoju, jak sądzę. Jeśli chcesz wiedzieć, które zapytania są wolne, zajrzyj do swojego dziennika slow-query-log. dev.mysql.com/doc/refman/5.1/en/slow-query-log.html
fancyPants
Ponieważ zapytania różnym użytkownikom zajmują różną ilość czasu. slow-query-log wydaje się odliczać czas oczekiwania na zwolnienie blokady
Michaił
1
Nie do końca prawda. Oczekiwanie na blokadę to także symbol powolnego działania innego zapytania. Sugeruję, aby wybrać zapytania z dziennika powolnych zapytań, uruchomić je za pomocą programu profilującego, aby zobaczyć, gdzie spędzili tak dużo czasu. Następnie, jeśli to możliwe, ulepsz je. Dodaj odpowiednio indeksy, przepisz je lub zredukuj odczytane dane, jeśli zapytanie spędza dużo czasu sending data. Lub cokolwiek, co zwiększy wydajność. Nie widzę sensu informowania użytkowników, dlaczego muszą czekać tak długo. Właściwie to ich nie obchodzi.
fancyPants
Nie chciałem wyświetlać użytkownikom wyników profilowania. Chciałem tylko uchwycić to na żywo i przechowywać do własnych celów
Michaił
37

Zaakceptowana odpowiedź traci ważność ...

SHOW PROFILE[S]przestarzałe od MySQL 5.6.7 i zostaną usunięte w przyszłej wersji MySQL. Zamiast tego użyj schematu wydajności; zobacz http://dev.mysql.com/doc/refman/5.6/en/performance-schema-query-profiling.html

Rick James
źródło
2
Jeśli Profil daje Ci coś bardziej użytecznego niż „wysyłanie danych”, wygrywasz na loterii.
Rick James
1
Używam 5.7.19 i nadal działam show profilespoprawnie
Siva Praveen,
1
@SivaPraveen - OK, na razie to nadal działa, ale „... zostanie usunięte ...”
Rick James