Profiluj swoją bazę danych

Zmierz wydajność aplikacji Firebase Realtime Database za pomocą narzędzia do profilowania bazy danych, które jest wbudowane w interfejs wiersza poleceń Firebase. Narzędzie do profilowania rejestruje całą aktywność w Twojej bazie danych w danym przedziale czasu, a potem generuje szczegółowy raport. Korzystaj z szczegółowego raportu, aby rozwiązywać problemy z wydajnością bazy danych, wykrywać obszary problemowe i zmniejszać liczbę niezaindeksowanych zapytań.

Tworzenie profilu

  1. Zanim zaczniesz profilować Firebase Realtime Database, upewnij się, że używasz najnowszej wersji interfejsu wiersza poleceń Firebase i że została ona zainicjowana w przypadku bazy danych i projektu, które chcesz profilować. Pamiętaj, że musisz być edytorem lub właścicielem tego projektu, aby go wyświetlić.

  2. Uruchom profilowanie bazy danych za pomocą tego polecenia:

    firebase database:profile
    Profilator wyświetla komunikat o stanie, gdy rejestruje operacje z Twojej bazy danych i tworzy profil.

  3. Naciśnij Enter, aby wypełnić profil i wyświetlić wyniki.

Interpretowanie wyników

Narzędzie do profilowania agreguje dane zebrane na temat operacji wykonywanych przez Twoją bazę danych i wyświetla wyniki w 3 głównych kategoriach: szybkość, szerokość pasmaniezaindeksowane zapytania.

Szybkość

Raport dotyczący szybkości mierzy czas reakcji serwera (w milisekundach) dla każdego typu operacji. Szybkość zmierzona w Raporcie dotyczącym szybkości może jednak nie odzwierciedlać rzeczywistej szybkości, z jaką użytkownicy korzystają z witryny. Różne czynniki, w tym stan sieci, mogą zwiększać opóźnienia po stronie klienta.

Raport „Szybkość” zawiera te usługi:

  • Ścieżka: ścieżka w Twojej bazie danych, w której wystąpiły operacje. Jeśli jest ich więcej niż 25, narzędzie do profilowania łączy je w ścieżkę nadrzędną i dodaje znacznik $wildcard. W raporcie możesz zobaczyć katalog główny bazy danych, który jest reprezentowany przez ukośnik /.
  • Liczba: liczba operacji wykonanych na danej ścieżce.
  • Średnia szybkość wykonania: średni czas, jaki zajmuje serwerowi wykonanie logiki biznesowej potrzebnej do obsługi określonego typu operacji na tej ścieżce. Okres czasu mierzony tutaj rozpoczyna się po zakończeniu okresu mierzonego przez „Średni czas oczekiwania”.
  • Średni czas oczekiwania: średni czas oczekiwania w kolejce przed wykonaniem. To opóźnienie dotyczy wszystkich żądań inicjowanych przez klienta. Całkowity czas oczekiwania na żądanie po stronie serwera to w przybliżeniu suma czasu oczekiwania na żądanie i szybkości jego wykonania.
  • Odmowa dostępu: liczba operacji na podanej ścieżce, które zostały zablokowane przez reguły bazy danych Firebase w Twojej bazie danych.
Raport dotyczący szybkości według typu operacji
Szybkość odczytu Czas odpowiedzi serwera na żądania klienta dotyczące odczytu danych z bazy danych. Czas wykonania odczytu jest zwykle proporcjonalny do ilości odczytywanych danych, ale nawet niewielkie odczyty mogą być opóźnione przez wstępny odczyt z pamięci podręcznej.
Zapisuj dane o szybkości wykonania Czas odpowiedzi serwera na żądanie klienta dotyczące zapisania danych do bazy danych. Czas wykonywania operacji zapisu jest proporcjonalny do ilości zapisywanych danych.
Szybkość wykonania połączenia Czas odpowiedzi serwera na żądania nawiązywania połączeń z klientami bazy danych. Czas oczekiwania na żądania połączenia jest w głównej mierze związany z obsługą na serwerze w pamięci operacyjnej i z zarządzaniem połączeniami.
Szybkość wykonywania transmisji

Czas potrzebny serwerowi na rozpowszechnianie danych do klientów, którzy nasłuchują danej ścieżki w celu otrzymywania aktualizacji w czasie rzeczywistym.

Właściwość Liczba w raporcie Szybkość transmisji zbiorczej zawiera zagregowaną liczbę transmisji, a nie liczbę klientów, którzy otrzymali informacje. Jeśli np. 10 klientów nasłuchuje określonej ścieżki, a serwer wysyła aktualizację do wszystkich 10 klientów, liczba transmisji będzie wynosić 1, mimo że dane otrzymało 10 klientów.

Właściwość Odmowa udzielenia uprawnień nie jest uwzględniana w raporcie Szybkość transmisji.

Przepustowość

Raport o przepustowości zawiera informacje o tym, ile danych zużywa baza danych w operacjach przychodzących i wychodzących. Nie należy jednak szacować rozliczeń na podstawie raportu Przepustowość, ponieważ nie uwzględnia on przepustowości używanej do innych operacji, takich jak profilowanie bazy danych. Raport Przepustowość w przybliżeniu szacuje rozmiar danych użytych przez operacje odczytu, zapisu i transmisji do i z bazy danych. Jest to narzędzie do pomiaru skuteczności, a nie do prognozowania rozliczeń.

Raport Prędkość transmisji danych zawiera te usługi:

  • Ścieżka: ścieżka w Twojej bazie danych, w której wystąpiły operacje. Jeśli jest ich więcej niż 25, narzędzie do profilowania łączy je w ścieżkę nadrzędną.

  • Łącznie:łączna liczba bajtów wychodzących i przyjmowanych w ramach wszystkich operacji na danej ścieżce.

  • Liczba: liczba operacji wykonanych na danej ścieżce.

  • Średnia:średnia liczba pobranych lub przesłanych bajtów w przypadku operacji na podanej ścieżce (bajty/zapis lub bajty/odczyt).

Raport o przepustowości
Pobrane bajty dane wykorzystywane w ramach operacji odczytu i transmisji wysyłanych za pomocą klienta SDK i interfejsu REST API;
Przesłane bajty Dane zużywane przez żądania zapisu przychodzące na serwer bazy danych. Usunięcia są wyświetlane jako zapisy z 0 bajtami w przypadku danych przychodzących.

Zapytania niezaindeksowane

Zapytania nieindeksowane mogą być kosztowne, ponieważ klienci pobierają wszystkie dane w danej lokalizacji, a następnie wykonują na nich zapytania. Spowoduje to wykorzystanie większej przepustowości niż to konieczne. Rozwiąż jak najwięcej zapytań niezaindeksowanych, aby zoptymalizować wydajność bazy danych.

Raport Zapytania niezindeksowane zawiera te właściwości:

  • Ścieżka: ścieżka w Twojej bazie danych, w której wystąpiły zapytania bez indeksowania.
  • Indeksowanie: reguła, którą należy dodać, aby rozwiązać problem z niezaindeksowanymi zapytaniami. Dowiedz się więcej o indeksowaniu w artykule Indeksowanie danych.
  • Liczba: liczba nieprzetworzonych zapytań, które wystąpiły na danej ścieżce.

Zaawansowane profilowanie

Aby zobaczyć wszystkie operacje wykonywane przez bazę danych, użyj flagi --raw podczas profilowania bazy danych w ten sposób:

firebase database:profile --raw

Dane wyjściowe w postaci tekstu zawierają też informacje o kliencie dotyczące każdej operacji, takie jak ciągi znaków userAgent i adresy IP. Więcej informacji o różnych operacjach profilowanych w Twoim Firebase Realtime Database znajdziesz w sekcji Firebase Realtime Database Typy operacji.

Narzędzie profilowania: nie jest narzędziem do rozliczeń.

Nie używaj narzędzia profilującego do szacowania kosztów przepustowości. Narzędzie do profilowania ma na celu zapewnienie ogólnego obrazu wydajności bazy danych, aby pomóc Ci w monitorowaniu operacji i rozwiązywaniu problemów, a nie do szacowania rozliczeń. Nie uwzględnia on ruchu sieciowego, tylko rejestruje szacunkowe dane aplikacji wysyłane w odpowiedziach.

Oto kilka typowych przykładów ruchu w sieci naliczanego przez Firebase, które nie są objęte profilem bazy danych:

  • Nakłady związane z protokołem: aby ustanowić i utrzymywać sesję, potrzebny jest dodatkowy ruch między serwerem a klientami. W zależności od podstawowego protokołu ten ruch może obejmować: opóźnienia związane z protokołem czasu rzeczywistego Firebase Realtime Database, opóźnienia związane z WebSocket i opóźnienia związane z nagłówkiem HTTP. Za każdym razem, gdy nawiązywane jest połączenie, ten koszt wraz z kosztem szyfrowania SSL zwiększa koszty połączenia. Chociaż zwykle nie jest to duża ilość przepustowości, może być znacząca, jeśli ładunki są małe lub jeśli często nawiązujesz krótkie połączenia.
  • Nakłady związane z szyfrowaniem SSL: szyfrowanie SSL wymaga nakładów, które są niezbędne do nawiązywania bezpiecznych połączeń. Średnio koszt ten wynosi około 3,5 KB na początkowe uściślenie rąk i około 40 bajtów na nagłówki rekordów TLS w każdej wysyłanej wiadomości. W przypadku większości aplikacji jest to niewielki odsetek rachunku. Może to jednak prowadzić do znacznego wzrostu procentowego, jeśli w Twoim przypadku wymagana jest duża liczba sesji SSL. Na przykład urządzenia, które nie obsługują biletów sesji TLS, mogą wymagać dużej liczby inicjowania połączeń SSL.

Dowiedz się więcej o interpretowaniu i szacowaniu rachunku.