Cette page explique comment récupérer des informations sur l'exécution des requêtes lorsque vous exécutez une requête.
Utiliser l'explication de la requête
Vous pouvez utiliser "Expliquer la requête" pour comprendre comment vos requêtes sont exécutées. Vous y trouverez des informations qui vous permettront d'optimiser vos requêtes.
Vous pouvez utiliser l'outil d'explication des requêtes dans la console Firebase :
- Dans la console Firebase, accédez à Bases de données et stockage > Firestore > Données > Éditeur de requêtes.
- Exécutez la requête pour laquelle vous souhaitez obtenir des informations sur l'exécution.
- Cliquez sur l'onglet Explication de la requête pour afficher le résultat de l'analyse de la requête.
Modes d'explication
Selon ce que vous souhaitez déboguer, vous pouvez exécuter une requête avec Query Explain dans différents modes :
analyze: planifie et exécute la requête. Renvoie des informations sur le planificateur, des statistiques et des métriques d'exécution, en plus des résultats habituels produits par la requête.explain: planifie la requête, mais ne l'exécute pas. Renvoie les informations du planificateur, mais pas les statistiques, les métriques ni les résultats d'exécution. Cela est utile pour déboguer le comportement d'une requête sans exécuter d'opérations coûteuses.
Analyse
La sortie de l'explication de la requête contient deux composants principaux : les statistiques récapitulatives et l'arborescence d'exécution. Prenons la requête suivante comme exemple :
db.pipeline().collection('/users').sort(field("status").ascending()).limit(100)
Statistiques récapitulatives
Le haut de la sortie expliquée contient un récapitulatif des statistiques d'exécution. Utilisez ces statistiques pour déterminer si une requête présente une latence ou un coût élevés. Il contient également des statistiques sur la mémoire qui vous indiquent dans quelle mesure votre requête est proche des limites de mémoire.
Execution:
results returned: 2
request peak memory usage: 20.25 KiB (20,736 B)
data bytes read: 148 B
entity row scanned: 2
Billing:
read units: 1
Arborescence d'exécution
L'arborescence d'exécution décrit l'exécution de la requête sous la forme d'une série de nœuds. Les nœuds inférieurs (nœuds feuilles) récupèrent les données de la couche de stockage, qui remonte l'arborescence pour générer une réponse à la requête.
Pour en savoir plus sur chaque nœud d'exécution, consultez la documentation de référence sur l'exécution.
Pour savoir comment utiliser ces informations afin d'optimiser vos requêtes, consultez Optimiser l'exécution des requêtes.
Voici un exemple d'arborescence d'exécution :
Tree:
• Compute
| $out_1: map_set($record_1, "__name__", $__name___1, "__key__", unset)
| is query result: true
|
| Execution:
| records returned: 2
| latency: 5.96 ms (local <1 ms)
|
└── • Compute
| $__name___1: map_get($record_1, "__key__")
|
| Execution:
| records returned: 2
| latency: 5.88 ms (local <1 ms)
|
└── • MajorSort
| fields: [$v_1 ASC]
| output: [$record_1]
| limit: 100
|
| Execution:
| records returned: 2
| latency: 5.86 ms (local <1 ms)
| peak memory usage: 20.25 KiB (20,736 B)
|
└── • Compute
| $v_1: map_get($record_1, "status")
|
| Execution:
| records returned: 2
| latency: 5.23 ms (local <1 ms)
|
└── • TableScan
source: /users
order: UNDEFINED
properties: *
row range: (-∞..+∞)
output record: $record_1
variables: [$record_1]
Execution:
records returned: 2
latency: 4.68 ms
records scanned: 2
data bytes read: 148 B
Étape suivante
- Pour en savoir plus sur les nœuds de l'arborescence d'exécution, consultez la documentation de référence sur l'exécution des requêtes.
- Pour savoir comment optimiser vos requêtes, consultez Optimiser l'exécution des requêtes.