Aplikacja „Monitor DB” jest przeznaczona do profilowania: zbierania i analizowania danych statystycznych o żądaniach bazy danych, przeglądania podsumowań informacji o tych danych.
Aplikacja „Monitor DB” nie działa na zasadzie „zainstaluj i przyspiesz bazę danych” — jest to narzędzie dla specjalistów posiadających kompetencje w pracy z bazami danych.
Na tej stronie można zobaczyć, które wątki są obecnie uruchomione. Informacje te można również uzyskać za pomocą polecenia mysqladmin processlist. Jeśli masz uprawnienia SUPER, możesz przeglądać wszystkie wątki, w przeciwnym razie tylko własne wątki.
Informacje te są bardzo przydatne, jeśli pojawi się komunikat o błędzie 'too many connections' (zbyt wiele połączeń) i trzeba dowiedzieć się, co się dzieje.
Na tej stronie można masowo zmienić/wybrać silnik przechowywania dla każdej tabeli bazy danych: InnoDB lub MyISAM. W tabeli opisano różnicę między tymi dwoma silnikami z prostymi przykładami.
| Opis | MyISAM | InnoDB |
|---|---|---|
| Obsługa transakcji (Transaction) - blok wyrażeń SQL, który w przypadku błędu w jednym żądaniu powraca do poprzedniego stanu (Rollback), a dopiero w przypadku wykonania wszystkich żądań jest zatwierdzany (Commit). | Nie | Tak |
| Obsługa kluczy obcych to sposób na powiązanie rekordów w dwóch tabelach za pomocą określonych pól, tak aby po zaktualizowaniu pola w tabeli nadrzędnej automatycznie następowała zmiana określonego pola w tabeli podrzędnej (podczas tworzenia klucza wybierasz dziecko i rodzica; dokładniej, tworzysz klucz w tabeli podrzędnej, który odwołuje się do tabeli nadrzędnej). | Nie | Tak |
| Blokowanie na poziomie wiersza, tj. jeśli proces musi zaktualizować wiersz w tabeli, blokuje tylko ten wiersz, umożliwiając innym równoległą aktualizację innych wierszy. | na poziomie tabeli | na poziomie wiersza |
| Jednoczesne żądania do różnych części tabeli. | Wolniej | Szybciej |
| Przy mieszanym obciążeniu w tabeli (select/update/delete/insert) | Wolniej | Szybciej |
| Operacja Insert | Szybciej | Wolniej, ponieważ istnieje narzut na transakcję, ale jest to cena niezawodności. |
| Jeśli przeważają operacje odczytu (SELECT) | Działa szybciej | Działa wolniej |
| Deadlock — sytuacja w środowisku wielozadaniowym lub SZBD (System Zarządzania Bazami Danych), w której kilka procesów znajduje się w stanie nieskończonego oczekiwania zasobów przechwyconych przez same te procesy. | Nie powstają | Możliwe. |
| Obsługa wyszukiwania pełnotekstowego | Tak | Nie (dostępne od wersji MySQL 5.6.4) |
| Żądanie Count(*) | Szybciej | Wolniej |
| Obsługa mysqlhotcopy to skrypt Perl, który używa poleceń SQL LOCK TABLES, FLUSH TABLES oraz Unix-narzędzi cp lub scp, aby szybko wykonać kopię zapasową bazy danych. | Tak | Nie |
| Przechowywanie tabel w plikach | Każda tabela jest oddzielnym plikiem | Dane w ustawieniach domyślnych są przechowywane w dużych udostępnianych plikach |
| Binarne kopiowanie tabel. Pliki tabel mogą być przenoszone między komputerami o różnych architekturach i różnych systemach operacyjnych bez żadnej konwersji. | Tak | Nie |
| Rozmiar tabel w bazie danych | Mniej | Dużej |
| Postępowanie w przypadku awarii | Crach całej tabeli | Z dzienników można odzyskać wszystko |
| W przypadku przechowywania „logów” itp. | Lepiej | Gorzej |
Jeśli wybierzesz okres, w którym zapis będzie wykonywany, obciążenie bazy danych zostanie zwiększone, ponieważ oprócz normalnego wykonania żądania wymagane jest zapisanie informacji o nim w bazie danych, więc obciążenie witryny będzie większe niż zwykle.
Aby włączyć zapisywanie należy:
W czerwonym okręgu obok ikony aplikacji „Monitor DB” można zobaczyć liczbę minut pozostałych do końca zapisu.
W ustawieniu „Analizuj żądania z czasem realizacji powyżej” określa się próg czasowy, który ma być używany podczas analizy żądań. Tylko te grupy żądań zostaną dodane do listy żądań, które zawierają żądania z czasem wykonania wyższym niż wartość określona w ustawieniu. Zalecamy rozpoczęcie analizy od wartości 0,1 sekundy i dalsze zmniejszanie jej w zależności od sytuacji. Nie ma potrzeby ponownego rozpoczynania zapisu - wystarczy zmienić ustawienie i ponownie kliknąć „Wykonaj analizę zarejestrowanych SQL żądań”.
W celu zebrania/aktualizacji danych należy nacisnąć przycisk „Aktualizuj dane podsumowania tabeli”. Po zakończeniu operacji w tabeli zostaną wyświetlone informacje o zgrupowanych zapytaniach wraz z ogólnymi statystykami. Klikając na ikonę w formie arkusza przejdziesz do okna dialogowego ze szczegółowymi informacjami na temat tej grupy żądań.
Na liście 100 ostatnich i 100 najwolniejszych żądań można zobaczyć poszczególne żądania zawarte w tej grupie, kiedy to żądanie zostało wykonane, czas wykonania i porównanie ze średnim czasem.
Ważne! Po naciśnięciu tego przycisku sprawdzany jest czas wykonania najwolniejszego żądania w grupie, więc nie należy się denerwować, jeśli wartość jest większa niż 100% średniej, porównaj ją z maksymalnym czasem wykonania żądania przedstawionym na stronie.
Klikając na ikonę w postaci zielonego kółka ze znaczkiem plus, zobaczysz stos wywołań funkcji, które doprowadziły do tego żądania. Informacje te pozwalają dowiedzieć się, która wtyczka, aplikacja, klasa, metoda doprowadziła do utworzenia tego żądania.
Zakładka „Plan wykonania żądania” zawiera informacje, które mogą pomóc zoptymalizować wydajność żądania. Informacje te są przydatne dla twórców wtyczek i aplikacji do analizowania i rozwiązywania problemów z wydajnością ich żądań.
Zakładka „Tabele BD” zawiera informacje (silnik przechowywania danych, format przechowywania, rozmiar danych, lista kolumn z typem danych, lista indeksów) o wszystkich tabelach bazy danych, które są zaangażowane w żądanie.
W zakładce „Zalecenia dla tworzenia indeksów” można dodać zalecane indeksy (w tym indeksy złożone) lub usunąć indeksy, które zostały wcześniej dodane przez aplikację. Indeksy w MySQL (Mysql indexes) są doskonałym narzędziem do optymalizacji SQL żądań. Należy pamiętać, że indeksy wiążą się z dodatkowymi operacjami zapisu na dysku. Za każdym razem, gdy aktualizujesz lub dodajesz dane do tabeli, dane w indeksie są również zapisywane i aktualizowane. Twórz tylko niezbędne indeksy, aby uniknąć marnowania zasobów serwera. Analizuj, jak bardzo zmienia się czas wykonania żądania po dodaniu/usunięciu tego lub innego indeksu za pomocą linku „Pobierz nowy czas realizacji żądania”.