Stanąłem przed problemem wyłapania nieoptymalnego zapytania w moim systemie. Ponieważ system gada z bazą niezwykle intensywnie, log zapytań urósł mi w ciągu kilku minut do wielkości trudnej do ogarnięcia. I jak tu znaleźć trefne zapytanie?
Wszystkie polecenia należy wykonywać z poziomu bazy danych. Najlepiej zacząć od otwarcia terminala, a w terminalu podać:
mysql -h localhost -u <nazwa użytkownika> -p<hasło>
pomiędzy -p a hasłem nie może być spacji!!!
pliki z logami zakładane są domyślnie na tym samym katalogu, na którym są pliki bazy danych. W Linuxie jest to zwykle katalog:
/var/lib/mysql
1. Włączenie logu zdarzeń w bazie
SET GLOBAL general_log = 'ON';
plik logu ma nazwę: <nazwa serwera>.log
2. Włączenie długich zapytań
Ustawienie pliku logu. Można podać pełną ścieżkę ale również tylko samą nazwę pliku:
set global slow_query_log_file = 'path';
Ustawienie czasu, od którego uważamy zapytanie jako długie (w sekundach)
set global long_query_time = 1;
włączenie logowania
SET GLOBAL slow_query_log = 'ON';
3. Włączenie logowania zapytań nieużywających indeksów
set global log_queries_not_using_indexes = 'ON';
I działa!! Mamy zapytania jak na widelcu 🙂