Profilieren Sie Ihre Datenbank

Messen Sie die Leistung Ihrer Firebase-Echtzeitdatenbank mit dem Datenbank-Profiler-Tool, das in die Firebase-CLI integriert ist. Das Profiler-Tool protokolliert alle Aktivitäten in Ihrer Datenbank über einen bestimmten Zeitraum und erstellt dann einen detaillierten Bericht. Verwenden Sie den detaillierten Bericht, um Probleme mit Ihrer Datenbankleistung zu beheben, Problembereiche zu erkennen und nicht indizierte Abfragen zu reduzieren.

Erstellen Sie ein Profil

  1. Bevor Sie mit der Profilierung Ihrer Firebase-Echtzeitdatenbank beginnen, stellen Sie sicher, dass Sie die neueste Version der Firebase-CLI verwenden und diese für die Datenbank und das Projekt initialisiert haben, für die Sie ein Profil erstellen möchten. Beachten Sie, dass Sie Herausgeber oder Eigentümer dieses Projekts sein müssen, um ein Profil erstellen zu können.

  2. Beginnen Sie mit der Profilierung 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 abzuschließen und die Ergebnisse anzuzeigen.

Interpretieren Sie Ihre Ergebnisse

Das Profiler-Tool aggregiert die gesammelten Daten über die Vorgänge Ihrer Datenbank und zeigt die Ergebnisse in drei Hauptkategorien an: Geschwindigkeit , Bandbreite und nicht indizierte Abfragen .

Geschwindigkeit

Der Geschwindigkeitsbericht misst die Antwortzeit des Servers (in Millisekunden) für jeden Vorgangstyp. Allerdings spiegelt die im Geschwindigkeitsbericht gemessene Geschwindigkeit möglicherweise nicht die Geschwindigkeitserfahrung der Endbenutzer wider. Verschiedene Faktoren, einschließlich Netzwerkbedingungen, können die Latenz auf der Clientseite erhöhen.

Der Geschwindigkeitsbericht umfasst die folgenden Eigenschaften:

  • Pfad: Der Pfad in Ihrer Datenbank, in dem die Vorgänge stattgefunden haben. Wenn es mehr als 25 untergeordnete Knoten gibt, fasst das Profiler-Tool diese zu einem übergeordneten Pfad zusammen und fügt eine $wildcard hinzu. Möglicherweise sehen Sie im Bericht das Stammverzeichnis Ihrer Datenbank, dargestellt durch einen Schrägstrich / .
  • Anzahl: Die Anzahl der Vorgänge, die am angegebenen Pfad ausgeführt wurden.
  • Durchschnittliche Ausführungsgeschwindigkeit: Die durchschnittliche Zeit, die der Server benötigt, um die Geschäftslogik auszuführen, die für die Verarbeitung des jeweiligen Vorgangstyps auf diesem Pfad erforderlich ist. Das hier gemessene Zeitintervall beginnt nach dem Zeitintervall, das durch die unten beschriebene „durchschnittliche ausstehende Zeit“ 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 Anforderungen auf. Die gesamte serverseitige Anforderungslatenz entspricht ungefähr der Summe der ausstehenden Zeit und der Ausführungsgeschwindigkeit dieser Anforderung.
  • Berechtigung verweigert: Die Anzahl der Vorgänge am angegebenen Pfad, die durch Firebase-Datenbankregeln in Ihrer Datenbank blockiert wurden.
Geschwindigkeitsbericht nach Operationstyp
Lesen Sie die Ausführungsgeschwindigkeit Die Serverantwortzeit für Clientanforderungen zum Lesen von Daten aus der Datenbank. Die Ausführungszeit von Lesevorgängen hängt im Allgemeinen von der Menge der gelesenen Daten ab, aber selbst einige kleine Lesevorgänge können durch Cache-Prefetching verzögert werden.
Schreibausführungsgeschwindigkeit Die Serverantwortzeit für Clientanforderungen zum Schreiben von Daten in die Datenbank. Die Schreibausführungszeit richtet sich nach der Menge der geschriebenen Daten.
Connect-Ausführungsgeschwindigkeit Die Antwortzeit des Servers für Verbindungsanfragen an Datenbank-Clients. Die Latenz für Verbindungsanfragen wird durch die serverseitige In-Memory-Buchhaltung im Zusammenhang mit der Verbindungsverwaltung dominiert.
Broadcast-Ausführungsgeschwindigkeit

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

Die Count- Eigenschaft im Broadcast-Geschwindigkeitsbericht aggregiert die Anzahl der stattgefundenen Broadcasts, nicht die Anzahl der Clients, die die Informationen empfangen haben. Wenn beispielsweise 10 Clients einen bestimmten Pfad abhörten und der Server eine Aktualisierung an alle 10 Clients sendete, spiegelt die Broadcast-Zählung nur 1 Broadcast wider, obwohl 10 Clients die Daten empfangen haben.

Die Eigenschaft „Berechtigung verweigert“ ist nicht im Broadcast-Geschwindigkeitsbericht enthalten.

Bandbreite

Der Bandbreitenbericht bietet Aufschluss darüber, wie viele Daten Ihre Datenbank bei eingehenden und ausgehenden Vorgängen verbraucht. Sie sollten den Bandbreitenbericht jedoch nicht zur Schätzung der Abrechnung verwenden, da er die Bandbreite, die für andere Vorgänge wie die Profilerstellung Ihrer Datenbank verwendet wird, nicht berücksichtigt. Der Bandbreitenbericht schätzt grob die Nutzlastgröße der Daten, die durch Lese-, Schreib- und Broadcast-Vorgänge zu und von Ihrer Datenbank verbraucht werden. Es handelt sich um ein Tool, das die Leistung misst, nicht um die Abrechnung vorherzusagen.

Der Bandbreitenbericht enthält die folgenden Eigenschaften:

  • Pfad: Der Pfad in Ihrer Datenbank, in dem die Vorgänge stattgefunden haben. Wenn mehr als 25 untergeordnete Knoten vorhanden sind, werden diese vom Profiler-Tool zu einem übergeordneten Pfad zusammengefasst.

  • Gesamt: Die gesamten ausgehenden oder eingehenden Bytes, die für alle Vorgänge auf dem angegebenen Pfad verwendet werden.

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

  • Durchschnitt: Die durchschnittliche Anzahl heruntergeladener oder hochgeladener Bytes über Vorgänge am angegebenen Pfad (Bytes/Schreiben oder Bytes/Lesen).

Bandbreitenbericht
Heruntergeladene Bytes Daten, die durch Lese- und Broadcast-Vorgänge verbraucht werden, die über die Client-SDKs und die REST-API gesendet werden.
Hochgeladene Bytes Daten, die durch Schreibanforderungen verbraucht werden, die beim Datenbankserver eingehen. Löschvorgänge werden als Schreibvorgänge mit 0 Bytes unter „Eingehend“ angezeigt.

Nicht indizierte Abfragen

Nicht indizierte Abfragen können teuer sein, da Clients alle Daten an einem Standort herunterladen und dann Abfragen daran durchführen. Dies verbraucht mehr Bandbreite als nötig. Lösen Sie so viele nicht indizierte Abfragen wie möglich, um die Leistung Ihrer Datenbank zu optimieren.

Der Bericht „Nicht indizierte Abfragen“ zeigt die folgenden Eigenschaften an:

  • Pfad: Der Pfad in Ihrer Datenbank, in dem die nicht indizierten Abfragen aufgetreten sind.
  • Index: Die Regel, die Sie hinzufügen sollten, um die nicht indizierten Abfragen aufzulösen. Erfahren Sie mehr über die Indizierung unter Indizieren Sie Ihre Daten .
  • Anzahl: Die Anzahl der nicht indizierten Abfragen, die am angegebenen Pfad aufgetreten sind.

Erweiterte Profilerstellung

Um alle von Ihrer Datenbank verarbeiteten Vorgänge anzuzeigen, verwenden Sie beim Profilieren Ihrer Datenbank das Flag --raw wie folgt:

firebase database:profile --raw

Die Rohausgabe enthält auch Clientinformationen für jeden Vorgang, wie z. B. userAgent Zeichenfolgen und IP-Adressen. Erfahren Sie mehr über die verschiedenen Vorgänge, die in Ihrer Firebase-Echtzeitdatenbank profiliert werden, unter Operationstypen der Firebase-Echtzeitdatenbank .

Das Profiler-Tool: Kein Abrechnungstool

Verwenden Sie das Profiler-Tool nicht zur Schätzung der Bandbreitenkosten. Das Profiler-Tool soll Ihnen einen Gesamtüberblick über die Leistung Ihrer Datenbank geben, um Ihnen bei der Überwachung von Vorgängen und der Behebung von Problemen zu helfen, und nicht um die Kostenschätzung abzuschätzen. Der Netzwerkverkehr wird nicht berücksichtigt, sondern nur eine Schätzung der in Antworten gesendeten Anwendungsdaten.

Im Folgenden finden Sie einige häufige Beispiele für Netzwerkverkehr, der von Firebase abgerechnet wird und nicht in Ihrem Datenbankprofil abgedeckt ist:

  • Protokoll-Overhead: Zum Aufbau und zur Aufrechterhaltung einer Sitzung ist etwas zusätzlicher Datenverkehr zwischen dem Server und den Clients erforderlich. Abhängig vom zugrunde liegenden Protokoll kann dieser Datenverkehr Folgendes umfassen: Echtzeitprotokoll-Overhead der Firebase Realtime Database, WebSocket-Overhead und HTTP-Header-Overhead. Jedes Mal, wenn eine Verbindung hergestellt wird, trägt dieser Overhead zusammen mit dem Overhead der SSL-Verschlüsselung zu den Verbindungskosten bei. Obwohl dies in der Regel keine große Bandbreite ist, kann sie erheblich sein, wenn Ihre Nutzlast gering ist oder Sie häufig kurze Verbindungen herstellen.
  • SSL-Verschlüsselungsaufwand: Der für sichere Verbindungen erforderliche SSL-Verschlüsselungsaufwand ist mit Kosten verbunden. Im Durchschnitt betragen diese Kosten etwa 3,5 KB für den ersten Handshake und etwa 40 B für die TLS-Datensatz-Header jeder ausgehenden Nachricht. Bei den meisten Apps ist dies ein kleiner Prozentsatz Ihrer Rechnung. Dies könnte jedoch ein großer Prozentsatz sein, wenn in Ihrem speziellen Fall viele SSL-Handshakes erforderlich sind. Beispielsweise könnten Geräte, die keine TLS-Sitzungstickets unterstützen, eine große Anzahl von SSL-Verbindungs-Handshakes erfordern.

Erfahren Sie mehr darüber, wie Sie Ihre Rechnung verstehen und schätzen können .