Profiluj swoją bazę danych

Zmierz wydajność Firebase Realtime Database za pomocą narzędzia do profilowania baz danych wbudowanego 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 zainicjalizowana dla bazy danych i projektu, które chcesz profilować. Pamiętaj, że musisz być edytorem lub właścicielem 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 zebrane dane o działaniu bazy danych i wyświetla wyniki w 3 głównych kategoriach: szybkość, przepustowość i zapytania niezindeksowane.

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ść wykonywania: średni czas potrzebny serwerowi na wykonanie logiki biznesowej niezbędnej do obsługi konkretnego typu operacji na danej ścieżce. Przedział czasu mierzony w tym miejscu zaczyna się po tym czasie mierzonym jako „Średni czas oczekiwania” opisany poniżej.
  • Średni czas oczekiwania: średni czas oczekiwania żądań w kolejce przed ich wykonaniem. To opóźnienie dotyczy wszystkich żądań inicjowanych przez klienta. Łączny czas oczekiwania na żądanie po stronie serwera jest przybliżoną sumą czasu oczekiwania na żądanie i szybkości jego wykonywania.
  • 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 zapisu skaluje się odpowiednio 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 połączenie jest zdominowany przez księgowanie po stronie serwera w pamięci związane 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 o szybkości transmisji zbiera liczbę przeprowadzonych 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 dostępu 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. Raportu dotyczącego przepustowości nie należy jednak używać do szacowania płatności, ponieważ nie uwzględnia on przepustowości wykorzystywanej na potrzeby 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, które miały miejsce na danej ścieżce.

  • Średnia: średnia liczba pobranych lub przesłanych bajtów między operacjami na danej ś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ń nieprzetworzonych, 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 niezaindeksowane zapytania.
  • Indeks:reguła, którą należy dodać, aby rozwiązywać niezindeksowane zapytania. Dowiedz się więcej o indeksowaniu w artykule Indeksowanie danych.
  • Liczba: liczba nieprzetworzonych zapytań, które wystąpiły na danej ścieżce.

Profilowanie zaawansowane

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

firebase database:profile --raw

Nieprzetworzone dane wyjściowe zawierają też informacje o kliencie dotyczące poszczególnych operacji, np. ciągi tekstowe userAgent i adresy IP. Dowiedz się więcej o różnych operacjach zprofilowanych w Firebase Realtime Database w 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 profilujące 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, a tylko rejestruje szacunkowe dane aplikacji wysyłane w odpowiedziach.

Oto kilka typowych przykładów ruchu w sieci rozliczanego przez Firebase, który nie jest uwzględniony w profilu 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 bazowego protokołu ruch ten może obejmować: narzut protokołu do Bazy danych czasu rzeczywistego Firebase, narzut WebSocket i narzut nagłówka HTTP. Za każdym razem, gdy nawiązywane jest połączenie, ten koszt, w połączeniu 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 to niewielki procent rachunku. Może to jednak prowadzić do znacznego wzrostu procentowego, jeśli w Twoim przypadku wymagane jest wiele 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.