Profiluj swoją bazę danych

Mierz skuteczność swojego Firebase Realtime Database za pomocą narzędzia do profilowania bazy danych wbudowanego w interfejs wiersza poleceń Firebase CLI. Narzędzie do profilowania rejestruje całą aktywność w bazie danych w danym okresie, a następnie generuje szczegółowy raport. Użyj szczegółowego raportu, aby rozwiązywać problemy z wydajnością bazy danych, wykrywać problematyczne obszary i zmniejszać liczbę zapytań bez indeksu.

Tworzenie profilu

  1. Zanim zaczniesz profilować Firebase Realtime Database, upewnij się, że używasz najnowszej wersji interfejsu Firebase CLI i że został on zainicjowany w przypadku bazy danych i projektu, które chcesz profilować. Pamiętaj, że aby profilować, musisz być edytorem lub właścicielem tego projektu.

  2. Aby rozpocząć profilowanie bazy danych, użyj tego polecenia:

    firebase database:profile
    Podczas rejestrowania operacji z bazy danych i tworzenia profilu narzędzie do profilowania wyświetla komunikat o stanie.

  3. Naciśnij Enter, aby zakończyć profilowanie i wyświetlić wyniki.

Interpretowanie wyników

Narzędzie do profilowania agreguje dane zebrane na temat operacji w bazie danych i wyświetla wyniki w 3 głównych kategoriach: szybkość, przepustowość i zapytania bez indeksu.

Szybkość

Raport Szybkość mierzy czas odpowiedzi serwera (w milisekundach) dla każdego typu operacji. Szybkość mierzona w raporcie Szybkość może jednak nie odzwierciedlać szybkości, z jaką korzystają użytkownicy. Różne czynniki, w tym warunki sieciowe, mogą powodować opóźnienia po stronie klienta.

Raport Szybkość zawiera te właściwości:

  • Ścieżka: ścieżka w bazie danych, w której wystąpiły operacje. Jeśli jest więcej niż 25 węzłów podrzędnych, narzędzie do profilowania zwija je do ścieżki nadrzędnej i dodaje symbol wieloznaczny $wildcard. W raporcie może być widoczny katalog główny bazy danych, oznaczony ukośnikiem /.
  • Liczba: liczba operacji, które wystąpiły w danej ścieżce.
  • Średnia szybkość wykonywania: średni czas, jaki serwer potrzebuje na wykonanie logiki biznesowej niezbędnej do obsługi danego typu operacji w tej ścieżce. Mierzony tu przedział czasu zaczyna się po czasie mierzonym przez „Średni czas oczekiwania” opisanym poniżej.
  • Średni czas oczekiwania: średni czas, jaki żądania spędzają w kolejce przed wykonaniem. To opóźnienie jest typowe dla wszystkich żądań inicjowanych przez klienta. Łączne opóźnienie żądania po stronie serwera jest w przybliżeniu sumą czasu oczekiwania i szybkości wykonywania tego żądania.
  • Odmowa uprawnień: liczba operacji w danej ścieżce, które zostały zablokowane przez reguły bazy danych Firebase w Twojej bazie danych.
Raport Szybkość według typu operacji
Szybkość wykonywania odczytu Czas odpowiedzi serwera na żądania klienta dotyczące odczytu danych z bazy danych. Czas wykonywania odczytu zwykle skaluje się wraz z ilością odczytywanych danych, ale nawet niektóre małe odczyty mogą być opóźnione przez pobieranie wstępne z pamięci podręcznej.
Szybkość wykonywania zapisu Czas odpowiedzi serwera na żądania klienta dotyczące zapisu danych w bazie danych. Czas wykonywania zapisu skaluje się wraz z ilością zapisywanych danych.
Szybkość wykonywania połączenia Czas odpowiedzi serwera na żądania dotyczące nawiązania połączenia z klientami bazy danych. Na opóźnienie w przypadku żądań połączenia wpływa głównie prowadzenie ewidencji po stronie serwera w pamięci związane z zarządzaniem połączeniami.
Szybkość wykonywania transmisji

Czas, jaki serwer potrzebuje na rozpowszechnienie danych wśród klientów nasłuchujących w danej ścieżce w celu uzyskania aktualizacji w czasie rzeczywistym.

Właściwość Liczba w raporcie Szybkość transmisji agreguje liczbę transmisji, a nie liczbę klientów, którzy otrzymali informacje. Jeśli np. 10 klientów nasłuchiwało w danej ścieżce, a serwer przesłał aktualizację do wszystkich 10 klientów, liczba transmisji odzwierciedla tylko 1 transmisję, mimo że dane otrzymało 10 klientów.

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

Przepustowość

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

Raport Przepustowość zawiera te właściwości:

  • Ścieżka: ścieżka w bazie danych, w której wystąpiły operacje. Jeśli jest więcej niż 25 węzłów podrzędnych, narzędzie do profilowania zwija je do ścieżki nadrzędnej.

  • Łącznie: łączna liczba bajtów wychodzących lub przychodzących używanych we wszystkich operacjach w danej ścieżce.

  • Liczba: liczba operacji, które wystąpiły w danej ścieżce.

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

Raport Przepustowość
Pobrane bajty Dane zużywane przez operacje odczytu i transmisji wysyłane za pomocą pakietów SDK klienta i interfejsu REST API.
Przesłane bajty Dane zużywane przez żądania zapisu przychodzące do serwera bazy danych. Usunięcia są wyświetlane jako zapisy z 0 bajtów w przypadku danych przychodzących.

Zapytania bez indeksu

Zapytania bez indeksu mogą być kosztowne, ponieważ klienci pobierają wszystkie dane w danej lokalizacji, a następnie wykonują na nich zapytania. Powoduje to większe niż konieczne zużycie przepustowości. Aby zoptymalizować wydajność bazy danych, rozwiąż jak najwięcej zapytań bez indeksu.

Raport Zapytania bez indeksu zawiera te właściwości:

  • Ścieżka: ścieżka w bazie danych, w której wystąpiły zapytania bez indeksu.
  • Indeks: reguła, którą należy dodać, aby rozwiązać zapytania bez indeksu. Więcej informacji o indeksowaniu znajdziesz w artykule Indeksowanie danych.
  • Liczba: liczba zapytań bez indeksu, które wystąpiły w danej ścieżce.

Profilowanie zaawansowane

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

firebase database:profile --raw

Surowe dane wyjściowe zawierają też informacje o kliencie dla każdej operacji, takie jak ciągi userAgent i adresy IP. Więcej informacji o różnych operacjach profilowanych w Twoim Firebase Realtime Database znajdziesz w artykule Firebase Realtime Database Operation Types.

Narzędzie do profilowania nie służy do rozliczeń

Nie używaj narzędzia do profilowania do szacowania kosztów przepustowości. Narzędzie do profilowania ma na celu przedstawienie ogólnego obrazu wydajności bazy danych, aby pomóc Ci w monitorowaniu operacji i rozwiązywaniu problemów, a nie w szacowaniu rozliczeń. Nie uwzględnia ono ruchu w sieci, tylko rejestruje szacunkową ilość danych aplikacji wysyłanych w odpowiedziach.

Oto kilka typowych przykładów ruchu w sieci rozliczanego przez Firebase, które nie są uwzględniane w profilu bazy danych:

  • Obciążenie protokołu: do nawiązania i utrzymania sesji potrzebny jest dodatkowy ruch między serwerem a klientami. W zależności od protokołu bazowego ten ruch może obejmować: obciążenie protokołu czasu rzeczywistego bazy danych czasu rzeczywistego Firebase, obciążenie protokołu WebSocket i obciążenie nagłówka HTTP. Za każdym razem, gdy nawiązywane jest połączenie, to obciążenie, w połączeniu z obciążeniem szyfrowania SSL, przyczynia się do kosztów połączenia. Zwykle nie jest to duża przepustowość, ale może być znaczna, jeśli ładunki są małe lub często nawiązujesz krótkie połączenia.
  • Obciążenie szyfrowania SSL: z obciążeniem szyfrowania SSL niezbędnym do bezpiecznych połączeń wiąże się koszt. Średnio koszt ten wynosi około 3,5 KB w przypadku początkowego uzgadniania połączenia i około 40 B w przypadku nagłówków rekordów TLS w każdej wiadomości wychodzącej. W przypadku większości aplikacji jest to niewielki procent rachunku. Może to jednak stanowić duży procent, jeśli w Twoim przypadku wymagana jest duża liczba uzgodnień połączenia SSL. Na przykład urządzenia, które nie obsługują biletów sesji TLS, mogą wymagać dużej liczby uzgodnień połączenia SSL.

Więcej informacji o tym, jak zrozumieć i oszacować rachunek