Risoluzione dei problemi

Questa pagina mostra come risolvere i problemi relativi a Firestore.

Latenza

La tabella seguente descrive le possibili cause di una maggiore latenza:

Causa della latenza Tipi di operazioni interessate Risoluzione
Traffico sostenuto che supera la regola 500-50-5. lettura, scrittura

Per aumentare rapidamente il traffico, Firestore tenta di scalare automaticamente per soddisfare l'aumento della domanda. Quando Firestore scala, la latenza inizia a diminuire.

I punti di interesse (frequenza elevata di lettura, scrittura ed eliminazione fino a un intervallo di documenti ristretto) limitano la capacità di scalabilità di Firestore. Esamina la progettazione per la scalabilità e identifica i punti critici nella tua applicazione.

Contesa, derivante dall'aggiornamento troppo frequente di un singolo documento o da transazioni. lettura, scrittura

Riduci la frequenza di scrittura ai singoli documenti.

Esamina la contesa dei dati nelle transazioni e come utilizzi le transazioni.

Query di unione lenta. read Ad esempio, le query con più filtri di uguaglianza (==) ma non supportate da indici composti possono comportare query di unione di unione lente. Per migliorare le prestazioni, aggiungi indici composti per queste query. Consulta il motivo n. 3 in Perché la mia query Firestore è lenta?
Letture di grandi dimensioni che restituiscono molti documenti. read Usa l'impaginazione per suddividere le letture di grandi dimensioni.
Troppe eliminazioni recenti. read
Questo problema influisce notevolmente sulle operazioni che elencano le raccolte in un database.
Se la latenza è causata da troppe eliminazioni recenti, il problema dovrebbe risolversi automaticamente dopo un po' di tempo. Se il problema persiste, contatta l'assistenza.
L'aggiunta e la rimozione dei listener troppo rapidamente. Query listener in tempo reale Consulta le best practice per gli aggiornamenti in tempo reale.
Ascolto di documenti di grandi dimensioni o di una query con molti risultati. Query listener in tempo reale Consulta le best practice per gli aggiornamenti in tempo reale
Fanout indice, in particolare per i campi array e quelli della mappa. write Rivedi l'utilizzo dei campi array e della mappa. Per i campi della mappa, puoi disattivare l'indicizzazione dei campi secondari.
scritture di grandi dimensioni e in batch. write

Prova a ridurre il numero di scritture in ogni scrittura batch. Le scritture in batch sono atomiche e molte scritture in un singolo batch possono aumentare la latenza e la contesa. Ad esempio, un batch di 10 scritture ha prestazioni migliori rispetto a un batch di 500 scritture.

Per l'inserimento collettivo di dati in cui non è necessaria l'atomicità, utilizza una libreria client server con scritture individuali parallelizzate. Le scritture in batch hanno prestazioni migliori di quelle serializzate, ma non migliori delle scritture parallele.

Codici di errore

Questa sezione elenca i problemi che potresti riscontrare e fornisce suggerimenti su come risolverli.

DEADLINE_EXCEEDED

Quanto segue può aumentare DEADLINE_EXCEEDED errori:

  • Un aumento della latenza ha causato il completamento di un'operazione più lungo della scadenza (60 secondi per impostazione predefinita).
DEADLINE_EXCEEDED

A deadline was exceeded on the server.

Per risolvere il problema, consulta la guida alla risoluzione dei problemi di latenza.

INTERROTTO

Le seguenti situazioni possono aumentare il numero di errori ABORTED:

  • Un documento che riceve troppi aggiornamenti al secondo.
  • Contesa dovuta a transazioni sovrapposte.
  • Aumenti di traffico che superano la regola 500-50-5 o che incontrano punti di interesse.
ABORTED

Too much contention on these datastore entities. Please try again.

Oppure

ABORTED

Aborted due to cross-transaction contention. This occurs when multiple
transactions attempt to access the same data, requiring Firestore to abort at
least one in order to enforce serializability.

Per risolvere il problema:

  • Per far aumentare rapidamente il traffico, Firestore tenta di scalare automaticamente in modo da soddisfare la domanda crescente. Quando Firestore scala, la latenza inizia a diminuire.
  • Gli hotspot limitano la capacità di fare lo scale up di Firestore. Consulta la progettazione per la scalabilità per identificare gli hotspot.
  • Esamina la contesa dei dati nelle transazioni e il tuo utilizzo delle transazioni.
  • Riduci la frequenza di scrittura ai singoli documenti.

RESOURCE_EXHAUSTED

Le seguenti situazioni possono causare errori RESOURCE_EXHAUSTED:

RESOURCE_EXHAUSTED

Some resource has been exhausted, perhaps a per-user quota, or perhaps the entire file system is out of space.

Per risolvere il problema:

INVALID_ARGUMENT

Le seguenti situazioni possono causare errori INVALID_ARGUMENT:

  • Tentativo di eseguire il commit di un documento con un valore del campo indicizzato maggiore di 1500 byte. Questo limite si applica alla codifica UTF-8 del valore del campo.
  • Tentativo di eseguire il commit di un documento con valori di campo non indicizzati maggiori di 1.048.487 byte (1 MiB - 89 byte). Questo limite si applica alla somma dei valori dei campi in un documento. Ad esempio, quattro campi da 256 KiB ciascuno hanno superato il limite.

1500 byte (indicizzati) e 1.048.487 byte (non indicizzati) sono limiti per i valori dei campi. Non puoi superare questi limiti e non si tratta di quote che possono essere modificate.

INVALID_ARGUMENT: The value of property field-name is longer than 1500 bytes

o

INVALID_ARGUMENT: The value of property field_name is longer than 1048487 bytes

Per risolvere il problema:

  • Per i valori indicizzati, dividi il campo in più campi. Se possibile, crea un campo non indicizzato e sposta i dati che non devono essere indicizzati in quello non indicizzato.
  • Per i valori dei campi non indicizzati, suddividi il campo in più campi o implementa la compressione per il valore del campo.