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
:
- Hai superato la quota del livello gratuito e la fatturazione non è abilitata per il tuo progetto.
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:
- Attendi il ripristino giornaliero della quota del livello gratuito o abilita la fatturazione per il tuo progetto.
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.