FBMonLogger
FBMonLogger jest teraz częścią HQbird Standard!
FBMonLogger to narzędzie do analizy danych z tabel monitorujących w Firebird i znajdowania problemów z wolnymi zapytaniami SQL, błędnie zaprojektowanymi transakcjami (długo działającymi transakcjami, transakcjami z nieprawidłowym poziomem izolacji itp.) oraz identyfikowania problematycznych aplikacji.
FBMonLogger może połączyć się z bazą Firebird z problemami wydajnościowymi i określić, co jest przyczyną spowolnienia: czy to jakieś przyłączenie użytkownika, wolne zapytanie SQL czy długo działająca transakcja?
FBMonLogger obsługuje Firebird 2.1, 2.5 i 3.0 - dla starszych wersji Firebird lub InterBase użyj FBScanner.
FBMonLogger może pokazać:
- Największe przyłączenia pod względem liczby operacji wejścia/wyjścia, odczytów nieindeksowanych i indeksowanych
- Najważniejsze instrukcje SQL pod względem liczby operacji wejścia/wyjścia, odczytów nieindeksowanych i indeksowanych
- Problematyczne transakcje: długo działające transakcje, transakcje z błędnym poziomem izolacji, transakcje odczytu/zapisu oraz powiązane informacje: kiedy się rozpoczęły, jakie aplikacje je uruchomiły, z jakiego adresu IP itp.
- Przyłączenia i instrukcje z najbardziej intensywnymi operacjami czyszczenia śmieci (garbage collection)
- Wskaźnik odczytów/zapisów, wskaźnik INSERT/UPDATE/DELETE i więcej.
Po połączeniu z bazą danych, w której chcesz znaleźć problemy wydajnościowe, należy wykonać kilka zrzutów tabel monitorujących - kliknij «Get Snapshot», aby wykonać zrzut.
Zagregowane statystyki wydajności dla przyłączeń użytkowników
Na pierwszym ekranie widzimy zagregowane statystyki dla połączeń z bazą danych i możemy zidentyfikować połączenia z największymi problemami:
Odczyt sekwencyjny / Odczyt indeksowany
„Odczyt sekwencyjny / Odczyt indeksowany" pokazuje całkowity stosunek między odczytami sekwencyjnymi (nieindeksowanymi) a odczytami indeksowanymi w aplikacji. Zwykle liczba odczytów nieindeksowanych powinna być niska, więc duży procent odczytów sekwencyjnych jest oznaką, że wiele zapytań SQL ma naturalne plany wykonania, co może być przyczyną wolnego czasu odpowiedzi.
Kliknięcie na rekord w «TOP przyłączenia: odczyt sekwencyjny/indeksowany» przeniesie Cię do zakładki «Przyłączenia», gdzie możesz zobaczyć więcej szczegółów na temat przyłączenia, a następnie przejść do zakładki «Transakcje» lub «Instrukcje», gdzie zobaczysz transakcje i instrukcje powiązane z wybranym przyłączeniem (jeśli zaznaczona jest opcja «Link do wybranego przyłączenia», w przeciwnym razie pokazane zostaną wszystkie transakcje/instrukcje dla wszystkich przyłączeń).
Szczegóły zapisu
«Szczegóły zapisu» daje przegląd operacji zapisu: stosunek między INSERT/UPDATE/DELETE we wszystkich przyłączeniach do bazy. W tabeli największych zapisujących możesz zobaczyć przyłączenia z największą liczbą operacji zapisu. Jest to przydatne do identyfikacji aplikacji lub modułów oprogramowania, które wykonują nadmierną liczbę aktualizacji lub usunięć (które są najbardziej niebezpiecznymi operacjami pod względem czyszczenia śmieci).
Szczegóły czyszczenia śmieci
Co oznaczają operacje czyszczenia śmieci?
- Purge - silnik usuwa wersje wsteczne, w bazie pozostaje tylko wersja główna.
- Expunge - usunięto zarówno wersję główną, jak i wszystkie wersje wsteczne.
- Backout - usunięto tylko wersję główną (z powodu wycofania).
Zwykle możemy powiązać purge z operacją UPDATE, Expunge z DELETE, a Backout z wycofaniem INSERT lub UPDATE. Wiele operacji backout może oznaczać problem z zarządzaniem transakcjami w aplikacji.
Użycie pamięci
Wykres «Użycie pamięci» pokazuje całkowitą pamięć używaną obecnie przez wszystkie aktywne przyłączenia oraz szczyt przydzielonej pamięci dla nich w przeszłości.
Lista największych przyłączeń pod względem użycia pamięci pokazuje największych konsumentów pamięci wśród Twoich przyłączeń. Jest to przydatne do znajdowania aplikacji lub modułów oprogramowania z nadmiernym użyciem pamięci.
Zagregowane statystyki wydajności dla instrukcji
Na drugiej zakładce znajdziesz zagregowane statystyki wydajności dla instrukcji. Te statystyki lepiej odzwierciedlają bieżącą sytuację w bazie danych - ponieważ tabele monitorujące zbierają informacje od początku życia każdego obiektu, instrukcje, które tu widzisz, to te, które działały w momencie wykonania zrzutu.
Odczyt sekwencyjny / Odczyt indeksowany
Na tej liście widzimy najważniejsze instrukcje, które wykonują wiele odczytów sekwencyjnych z bazy danych. Zwykle takie instrukcje wymagają dostrojenia SQL - albo poprzez dostrojenie indeksów, albo przez przeprojektowanie zapytania SQL.
Aby dostroić zapytanie, sprawdź jego plan wykonania: zwykle możliwe jest poprawienie szybkości zapytania poprzez wyeliminowanie NATURAL w planach za pomocą nowych indeksów lub przeprojektowania zapytania. Kliknij na instrukcję na tej liście, aby otworzyć zakładkę «Instrukcje», gdzie znajdziesz więcej szczegółów na temat wybranej instrukcji i przejdziesz do powiązanej transakcji lub przyłączenia.
Odczyt stron/zapis stron
Ten wykres i lista pokazują krótką informację o najważniejszych instrukcjach wykonujących wiele odczytów - oznacza to, że zużywają one znaczące operacje wejścia/wyjścia i mogą wpływać na wydajność innych zapytań. Instrukcje SQL z wartościami szczytowymi powinny być dokładnie sprawdzone pod kątem optymalnej wydajności.
Szczegóły zapisu dla instrukcji
Na tym wykresie możesz zobaczyć, jakie operacje zapisu wykonywały instrukcje SQL w momencie wykonania zrzutu tabel monitorujących, i zidentyfikować UPDATE i DELETE, które wprowadziły wiele zmian w bazie danych.
Szczegóły czyszczenia śmieci dla instrukcji
Na tym wykresie widzimy, ile operacji czyszczenia śmieci zostało wykonanych przez instrukcje działające w momencie zrzutu.
Użycie pamięci dla instrukcji
W przeciwieństwie do zagregowanych statystyk użycia pamięci dla przyłączeń, użycie pamięci przez instrukcje może pokazać listę dokładnych instrukcji, które w danym momencie zużywają dużo pamięci.
Przyłączenia
Trzecia zakładka to «Przyłączenia». Możesz otworzyć tę zakładkę bezpośrednio, klikając jeden z rekordów w «Zagregowanych statystykach wydajności».
Przyłączenia pokazują listę użytkowników połączonych z bazą Firebird, z wieloma przydatnymi szczegółami: USER i ROLE przyłączenia, czas rozpoczęcia i ID przyłączenia, czy czyszczenie śmieci jest włączone dla przyłączenia, nazwa zdalnego procesu, który ustanowił przyłączenie, oraz kilka skumulowanych liczników wydajności dla przyłączenia: liczba odczytów sekwencyjnych [wykonanych przez przyłączenie od jego rozpoczęcia], liczba odczytów indeksowanych, liczba insertów, aktualizacji i usunięć, a także rekordy backout, purge i expunge.
Domyślnie niektóre kolumny przyłączeń są wyłączone, aby pokazywać tylko najważniejsze informacje.
Oczywiście, za każdym razem, gdy klikniesz na przyłączenie, możesz przejść do transakcji działających w jego obrębie, a następnie do instrukcji. W lewym górnym rogu zakładek Transakcje i Instrukcje znajduje się pole wyboru, które kontroluje to zachowanie - gdy jest zaznaczone, pokazywane będą tylko transakcje i instrukcje oznaczone wybranym ID przyłączenia.
Transakcje
Zakładka «Transakcje» pokazuje aktywne transakcje w momencie wykonania zrzutu. Jeśli zaznaczona jest opcja «Link do wybranego przyłączenia», pokazywane będą tylko transakcje dla wybranego przyłączenia, w przeciwnym razie pokazywane są wszystkie transakcje.
Jedną z najważniejszych cech jest czas życia transakcji: ponieważ Firebird jest zaprojektowany do pracy z krótkimi transakcjami zapisu, ważne jest, aby były one jak najkrótsze. FBMonLogger podświetla transakcje z trybami izolacji i ustawieniami odczytu-zapisu, które utrzymują najstarszą aktywną transakcję (Oldest Active Transaction) i w związku z tym powodują, że nadmierne wersje rekordów nie są czyszczone. Jeśli widzisz taką transakcję i rozpoczęła się ona jakiś czas temu, oznacza to, że może być odpowiedzialna za nadmierne wersje rekordów.
Sortuj według kolumny «czas rozpoczęcia» i szukaj starych transakcji oznaczonych na czerwono: wszystkie transakcje zapisywalne i migawki tylko do odczytu blokują najstarszą aktywną transakcję i powodują utrzymywanie nadmiernych wersji rekordów. Zidentyfikuj, gdzie te transakcje się rozpoczęły (kliknij prawym przyciskiem myszy i wybierz «Wyświetl przyłączenie nadrzędne») i popraw swój kod, aby zatwierdzić tę transakcję wcześniej.
Instrukcje
Zakładka «Instrukcje» pokazuje instrukcje aktywne w momencie zrzutu: jeśli potrzebujesz przechwycić wszystkie instrukcje, należy użyć FBPerfMon lub FBScanner (wszystkie te narzędzia są częścią IBSurgeon Optimization Pack).
Jeśli zaznaczona jest opcja «Link do wybranego przyłączenia», pokazywane są tylko instrukcje dla konkretnego przyłączenia, w przeciwnym razie na liście znajdują się wszystkie aktywne instrukcje.
Niektóre instrukcje nie mają powiązanego ID transakcji (=0): te zapytania są przygotowane, ale nie wykonane.




