Profil für Ihre Datenbank erstellen

Messen Sie die Leistung Ihres Firebase Realtime Database mit dem Datenbankprofiler-Tool, das in die Firebase-Befehlszeile integriert ist. Das Profiler-Tool protokolliert alle Aktivitäten in Ihrer Datenbank über einen bestimmten Zeitraum hinweg und generiert dann einen detaillierten Bericht. Mit dem detaillierten Bericht können Sie Probleme mit der Datenbankleistung beheben, Problembereiche erkennen und nicht indexierte Abfragen reduzieren.

Profil erstellen

  1. Bevor Sie mit dem Profiling Ihrer Firebase Realtime Database beginnen, müssen Sie die aktuelle Version der Firebase-CLI verwenden und sie für die Datenbank und das Projekt initialisiert haben, die Sie profilieren möchten. Sie müssen Bearbeiter oder Inhaber des Projekts sein, um es zu profilieren.

  2. Starten Sie das Profiling Ihrer Datenbank mit dem folgenden Befehl:

    firebase database:profile
    Der Profiler zeigt eine Statusmeldung an, während er Vorgänge aus Ihrer Datenbank aufzeichnet und das Profil erstellt.

  3. Drücken Sie die Eingabetaste, um das Profil zu vervollständigen und die Ergebnisse anzeigen zu lassen.

Ergebnisse interpretieren

Das Profiler-Tool fasst die Daten zusammen, die es zu den Vorgängen Ihrer Datenbank erfasst hat, und zeigt die Ergebnisse in drei Hauptkategorien an: Geschwindigkeit, Bandbreite und nicht indexierte Abfragen.

Geschwindigkeit

Im Geschwindigkeitsbericht wird die Serverantwortzeit (in Millisekunden) für jeden Vorgangstyp gemessen. Die im Geschwindigkeitsbericht gemessene Geschwindigkeit entspricht jedoch möglicherweise nicht der Geschwindigkeit, die Endnutzer tatsächlich erleben. Verschiedene Faktoren, darunter Netzwerkbedingungen, können zu Latenz auf der Clientseite führen.

Der Geschwindigkeitsbericht enthält die folgenden Attribute:

  • Pfad:Der Pfad in Ihrer Datenbank, in dem die Vorgänge ausgeführt wurden. Wenn es mehr als 25 untergeordnete Knoten gibt, werden diese im Profiler-Tool in einem übergeordneten Pfad zusammengefasst und mit dem Marker $wildcard versehen. Im Bericht wird möglicherweise das Stammverzeichnis Ihrer Datenbank mit einem Schrägstrich / dargestellt.
  • Anzahl:Die Anzahl der Vorgänge, die für den angegebenen Pfad ausgeführt wurden.
  • Durchschnittliche Ausführungsgeschwindigkeit:Die durchschnittliche Zeit, die der Server benötigt, um die Geschäftslogik auszuführen, die zum Verarbeiten des jeweiligen Vorgangstyps an diesem Pfad erforderlich ist. Das hier gemessene Zeitintervall beginnt nach dem Intervall, das durch die unten beschriebene „durchschnittliche Wartezeit“ gemessen wird.
  • Durchschnittliche Wartezeit:Die durchschnittliche Zeit, die Anfragen in der Warteschlange verbringen, bevor sie ausgeführt werden. Diese Verzögerung tritt bei allen vom Client initiierten Anfragen auf. Die gesamte serverseitige Anfragelatenz ist in etwa die Summe der Wartezeit und der Ausführungsgeschwindigkeit der Anfrage.
  • Berechtigung verweigert:Die Anzahl der Vorgänge am angegebenen Pfad, die von den Firebase-Datenbankregeln für Ihre Datenbank blockiert wurden.
Geschwindigkeitsbericht nach Vorgangstyp
Lesegeschwindigkeit Die Serverantwortzeit für Clientanfragen zum Lesen von Daten aus der Datenbank. Die Ausführungszeit für Lesevorgänge skaliert in der Regel mit der Menge der gelesenen Daten. Auch kleine Lesevorgänge können jedoch durch das Vorabrufen von Cache-Daten verzögert werden.
Schreibgeschwindigkeit Die Serverantwortzeit für Clientanfragen zum Schreiben von Daten in die Datenbank. Die Ausführungszeit für Schreibvorgänge skaliert mit der Menge der geschriebenen Daten.
Ausführungsgeschwindigkeit von Connect Die Serverantwortzeit für Anfragen zum Herstellen einer Verbindung zu Datenbankclients. Die Latenz für Verbindungsanfragen wird durch die serverseitige In-Memory-Buchführung im Zusammenhang mit der Verbindungsverwaltung dominiert.
Ausführungsgeschwindigkeit von Broadcasts

Die Zeit, die der Server benötigt, um Daten an Clients zu verteilen, die den angegebenen Pfad für Echtzeitaktualisierungen abonnieren.

Die Eigenschaft Count (Anzahl) im Broadcast Speed Report (Bericht zur Broadcast-Geschwindigkeit) fasst die Anzahl der Broadcasts zusammen, die stattgefunden haben, nicht die Anzahl der Clients, die die Informationen erhalten haben. Wenn beispielsweise 10 Clients einen bestimmten Pfad überwachen und der Server eine Aktualisierung an alle 10 Clients sendet, wird nur eine Broadcast-Nachricht gezählt, obwohl 10 Clients die Daten erhalten haben.

Die Property Permission Denied ist nicht im Bericht zur Broadcast-Geschwindigkeit enthalten.

Bandbreite

Der Bandbreitenbericht gibt Aufschluss darüber, wie viele Daten Ihre Datenbank bei eingehenden und ausgehenden Vorgängen verbraucht. Sie sollten den Bandbreitenbericht jedoch nicht verwenden, um die Abrechnung zu schätzen, da er keine Bandbreite enthält, die für andere Vorgänge wie das Profiling Ihrer Datenbank verwendet wird. Im Bandbreitenbericht wird die Nutzlastgröße der Daten, die von Lese-, Schreib- und Broadcastvorgängen in Ihrer Datenbank und aus Ihrer Datenbank verwendet werden, geschätzt. Es ist ein Tool zur Messung der Leistung, nicht zur Prognose der Abrechnung.

Der Bandbreitenbericht enthält die folgenden Attribute:

  • Pfad:Der Pfad in Ihrer Datenbank, in dem die Vorgänge ausgeführt wurden. Wenn es mehr als 25 untergeordnete Knoten gibt, werden diese im Profiler-Tool in einem übergeordneten Pfad zusammengefasst.

  • Insgesamt:Die Gesamtzahl der ausgehenden oder eingehenden Byte, die für alle Vorgänge am angegebenen Pfad verwendet werden.

  • Anzahl:Die Anzahl der Vorgänge, die für den angegebenen Pfad ausgeführt wurden.

  • Durchschnitt:Die durchschnittliche Anzahl der heruntergeladenen oder hochgeladenen Byte für alle Vorgänge am angegebenen Pfad (Byte/Schreiben oder Byte/Lesen).

Bandbreitenbericht
Heruntergeladene Byte Daten, die über Lese- und Broadcastvorgänge abgerufen werden, die über die Client-SDKs und die REST API gesendet werden.
Hochgeladene Byte Daten, die durch Schreibanfragen an den Datenbankserver verwendet werden. Löschvorgänge werden unter „Eingehend“ als Schreibvorgänge mit 0 Byte angezeigt.

Nicht indexierte Anfragen

Nicht indexierte Abfragen können teuer sein, da Clients alle Daten an einem Ort herunterladen und dann Abfragen darauf ausführen. Dadurch wird mehr Bandbreite verbraucht als nötig. Lösen Sie möglichst viele nicht indexierte Abfragen, um die Leistung Ihrer Datenbank zu optimieren.

Der Bericht „Nicht indexierte Anfragen“ enthält die folgenden Eigenschaften:

  • Pfad:Der Pfad in Ihrer Datenbank, in dem die nicht indexierten Abfragen aufgetreten sind.
  • Index:Die Regel, die Sie hinzufügen sollten, um die nicht indexierten Anfragen zu beheben. Weitere Informationen zum Indexieren von Daten
  • Anzahl:Die Anzahl der nicht indexierten Anfragen, die für den angegebenen Pfad aufgetreten sind.

Erweiterte Profilerstellung

Wenn Sie alle Vorgänge sehen möchten, die von Ihrer Datenbank verarbeitet werden, verwenden Sie beim Profiling Ihrer Datenbank das Flag --raw, wie unten dargestellt:

firebase database:profile --raw

Die Rohausgabe enthält auch Clientinformationen für jeden Vorgang, z. B. userAgent-Strings und IP-Adressen. Firebase Realtime Database Operation Types in Ihrem Firebase Realtime Database enthält weitere Informationen zu den verschiedenen Vorgängen, die in Ihrem Profil erfasst werden.

Profiler-Tool: Kein Abrechnungstool

Verwenden Sie das Profiler-Tool nicht, um die Bandbreitenkosten zu schätzen. Das Profiler-Tool soll Ihnen einen Überblick über die Leistung Ihrer Datenbank geben, damit Sie Vorgänge überwachen und Probleme beheben können. Es ist nicht dazu gedacht, die Abrechnung zu schätzen. Der Netzwerk-Traffic wird nicht berücksichtigt. Es wird nur eine Schätzung der in Antworten gesendeten Anwendungsdaten aufgezeichnet.

Hier sind einige häufige Beispiele für Netzwerkverkehr, der von Firebase abgerechnet wird und nicht in Ihrem Datenbankprofil enthalten ist:

  • Protokoll-Overhead:Für das Einrichten und Aufrechterhalten einer Sitzung ist zusätzlicher Traffic zwischen dem Server und den Clients erforderlich. Je nach zugrunde liegendem Protokoll kann dieser Traffic Folgendes umfassen: Overhead des Echtzeitprotokolls der Firebase Realtime Database, WebSocket-Overhead und HTTP-Header-Overhead. Jedes Mal, wenn eine Verbindung hergestellt wird, trägt dieser Overhead in Kombination mit dem Overhead der SSL-Verschlüsselung zu den Verbindungskosten bei. Das ist in der Regel keine große Bandbreite, kann aber erheblich sein, wenn Ihre Nutzlasten sehr klein sind oder Sie häufig kurze Verbindungen herstellen.
  • SSL-Verschlüsselungs-Overhead:Für die SSL-Verschlüsselung, die für sichere Verbindungen erforderlich ist, fallen Kosten an. Im Durchschnitt betragen die Kosten für den ersten Handshake etwa 3,5 KB und für TLS-Datensatzheader in jeder ausgehenden Nachricht etwa 40 B. Bei den meisten Apps macht dies nur einen kleinen Prozentsatz Ihrer Rechnung aus. Wenn in Ihrem speziellen Fall jedoch viele SSL-Handshakes erforderlich sind, kann dies einen großen Prozentsatz ausmachen. Geräte, die keine TLS-Sitzungstickets unterstützen, benötigen möglicherweise eine große Anzahl von SSL-Verbindungs-Handshakes.

Weitere Informationen zum Nachvollziehen und Schätzen Ihrer Rechnung