Auf dieser Seite wird beschrieben, wie Sie Probleme mit Firestore im Datastore-Modus beheben.
Latenz
In folgender Tabelle werden mögliche Ursachen für eine erhöhte Latenz beschrieben:
Latenzursache | Arten von betroffenen Vorgängen | Lösung |
---|---|---|
Kontinuierlicher Traffic, der die Regel 500-50-5 überschreitet. | Lese-/Schreibzugriff |
Bei einem schnellen Anstieg des Traffics wird im Datastore-Modus eine automatische Skalierung versucht, um der erhöhten Nachfrage gerecht zu werden. Wenn der Datastore-Modus skaliert wird, nimmt die Latenz ab. Hotspots (hohe Lese-, Schreib- und Löschraten bei einem kleinen Entitätenbereich) schränken die Skalierungsfähigkeit des Datastore-Modus ein. Überprüfen Sie das Skalierbares Design und ermitteln Sie Hotspots in Ihrer Anwendung. |
Konflikte, die entweder durch zu häufige Aktualisierung einer einzelnen Entität oder durch Transaktionen verursacht werden. | Lese-/Schreibzugriff |
Reduzieren Sie die Schreibrate für einzelne Entitäten. Prüfen Sie die Transaktionsisolation und -konsistenz und prüfen Sie, wie Sie Transaktionen verwenden. |
Anfragen für langsame Join-Vorgänge. | read |
Beispielsweise können Anfragen mit mehreren Gleichheitsfiltern (== ), die jedoch nicht von zusammengesetzten Indexen unterstützt werden, zu langsamen Join-Anfragen führen.
Fügen Sie für diese Abfragen zusammengesetzte Indexe hinzu, um die Leistung zu verbessern. Weitere Informationen finden Sie unter Indexe optimieren.
|
Große Lesevorgänge, die viele Entitäten zurückgeben. | read | Verwenden Sie Abfrage-Cursor, um große Lesevorgänge aufzuteilen. |
Zu viele kürzliche Löschvorgänge. | read Dies wirkt sich stark auf Vorgänge aus, die Typen in einer Datenbank auflisten. |
Wenn die Latenz durch zu viele kürzliche Löschvorgänge verursacht wird, sollte sich das Problem nach einiger Zeit von selbst beheben. Tritt das Problem weiter auf, wenden Sie sich an den Support. |
Index-Fanout, insbesondere bei Array-Attributen | write | Prüfen Sie explodierende Indexe und Ihre Verwendung von Array-Attributen. |
Fehlercodes
In diesem Abschnitt sind mögliche Probleme sowie Vorschläge zu deren Behebung aufgeführt.
DEADLINE_EXCEEDED
DEADLINE_EXCEEDED A deadline was exceeded on the server.
Informationen zur Behebung dieses Problems finden Sie im Leitfaden zur Fehlerbehebung bei Latenzen.
ABORTED
Folgende Situationen können ABORTED
-Fehler erhöhen:
- Eine Entität erhält zu viele Updates pro Sekunde.
- Konflikte bei sich überschneidenden Transaktionen.
- Trafficanstiege, die die 500-50-5-Regel überschreiten oder auf Hotspots treffen.
ABORTED Too much contention on these datastore entities. Please try again.
Oder
ABORTED Aborted due to cross-transaction contention. This occurs when multiple transactions attempt to access the same data, requiring Datastore mode to abort at least one in order to enforce serializability.
So beheben Sie das Problem:
- Bei einem schnellen Trafficanstieg wird im Datastore-Modus versucht, automatisch zu skalieren, um der erhöhten Nachfrage gerecht zu werden. Wenn der Datastore-Modus skaliert wird, nimmt die Latenz ab.
- Hotspots schränken die Fähigkeit des Datastore-Modus zum Hochskalieren ein. Informationen zum Erkennen von Hotspots finden Sie unter Skalierbares Design.
- Prüfen Sie auf Datenkonflikte bei Transaktionen und Ihre Nutzung von Transaktionen.
- Reduzieren Sie die Schreibrate für einzelne Entitäten.
RESOURCE_EXHAUSTED
Folgende Situationen können zu RESOURCE_EXHAUSTED
-Fehlern führen:
Sie haben das kostenlose Kontingentkontingent überschritten und die Abrechnung für Ihr Projekt ist nicht aktiviert.
RESOURCE_EXHAUSTED Some resource has been exhausted, perhaps a per-user quota, or perhaps the entire file system is out of space.
So beheben Sie das Problem:
- Warten Sie, bis das Kontingent der kostenlosen Stufe pro Tag zurückgesetzt wurde, oder aktivieren Sie die Abrechnung für Ihr Projekt.
INVALID_ARGUMENT
Die folgenden Situationen können INVALID_ARGUMENT
-Fehler verursachen:
- Versuch, einen Commit für eine Entität auszuführen, deren Attributwert indexed größer als 1.500 Byte ist. Dieses Limit gilt für die UTF-8-Codierung des Property-Werts.
- Versuch eines Commits für eine Entität mit nicht indexierten Attributwerten, die größer als 1.048.487 Byte (1 MiB – 89 Byte) sind. Dieses Limit gilt für die Summe der Attributwerte in einer Entität. Beispielsweise überschreiten vier Attribute mit jeweils 256 KiB den Grenzwert.
1.500 Byte (indexiert) und 1.048.487 Byte (nicht indexiert) sind die Limits für Attributwerte. Sie können diese Limits nicht überschreiten und sie sind keine Kontingente, die angepasst werden können.
INVALID_ARGUMENT: The value of property property-name is longer than 1500 bytes
oder
INVALID_ARGUMENT: The value of property property_name is longer than 1048487 bytes
So beheben Sie das Problem:
- Teilen Sie bei indexierten Attributwerten das Attribut in mehrere Attribute auf. Erstellen Sie nach Möglichkeit ein nicht indexiertes Attribut und verschieben Sie Daten, die nicht indexiert werden müssen, in dieses nicht indexierte Attribut.
- Teilen Sie bei nicht indexierten Attributwerten das Attribut in mehrere Attribute auf oder implementieren Sie die Komprimierung für den Attributwert.