Utilisation des insights de requêtes pour améliorer les performances¶
Si certaines conditions affectent les performances des requêtes, Snowflake fournit des insights sur ces conditions. Chaque insight comprend un message expliquant comment les performances des requêtes peuvent être affectées et fournit une recommandation générale pour améliorer les performances.
Vous pouvez accéder à ces insights dans Snowsight en interrogeant la vue QUERY_INSIGHTS.
Les sections suivantes fournissent des détails sur les insights de requête :
Liste des types d’insights¶
Le volet Query Insights et la vue QUERY_INSIGHTS fournissent des informations, notamment sur les éléments suivants :
Un message concernant la condition détectée et son impact potentiel sur les performances de la requête.
Détails sur la partie de la requête qui a produit la condition.
Une étape suivante suggérée pour traiter la condition, si celle-ci affecte négativement les performances.
Le tableau suivant répertorie les types d’insights par ID de type.
ID de type |
Insight |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
La requête a bénéficié de l’optimisation de la recherche et de Snowflake Optima |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
La requête est restée trop longtemps dans la file d’attente de l’entrepôt |
Aucun filtre sur l’analyse de tableau¶
Une requête ou sous-requête ne comporte pas de clause WHERE, ce qui signifie que la requête balaie toute le tableau et peut renvoyer plus de lignes que prévu.
Pour améliorer les performances, ajoutez une clause WHERE pour réduire la quantité de données analysées.
Filtre non applicable¶
Une clause WHEREn’élimine aucune ligne, ce qui signifie que la requête peut balayer plus de données que prévu.
Pour améliorer les performances, ajoutez une condition plus sélective à la clause WHERE, ou rendez la condition existante plus sélective.
Filtre non sélectif¶
Une clauseWHERE ne réduit pas significativement le nombre de lignes, ce qui signifie que la requête peut balayer plus de données que prévu.
Contrairement à l’insight Filtre non applicable, cet insight indique que la clause WHERE filtre certaines lignes mais qu’elle aurait pu être plus sélective.
Pour améliorer les performances, ajoutez une condition plus sélective à la clause WHERE, ou rendez la condition existante plus sélective.
LIKE filter with leading wildcard¶
The query uses a LIKE filter that starts with a wildcard character. Specifying a pattern that starts with a wildcard can result in scanning a large amount of data.
To reduce the amount of data scanned, specify a pattern that does not start with a wildcard, if possible. If you need to specify a pattern that starts with a wildcard, consider enabling search optimization for more efficient pattern matching.
Le filtre utilise une clé de clustering¶
La requête a bénéficié du filtrage sur une clé de clustering pour la table .
Requête bénéficiant de l’optimisation de la recherche¶
La requête a bénéficié du filtrage sur une colonne configurée pour l’optimisation de recherche.
Requête bénéficiant de Snowflake Optima¶
La requête a bénéficié de Snowflake Optima.
La requête a bénéficié de l’optimisation de la recherche et de Snowflake Optima¶
La requête a bénéficié de l’optimisation de la recherche et de Snowflake Optima.
Jointure sans condition de jointure¶
La jointure ne possède pas la condition de jointure. Le résultat est un jointure croisée, qui renvoie toutes les combinaisons possibles de lignes.
Pour réduire le nombre de lignes produit par cette jointure, spécifiez une ou plusieurs conditions de jointure.
Join with inefficient join condition¶
The join contains a complex join condition that is evaluated after the data sets are joined. This is less efficient than if the condition were evaluated before the data sets were joined, which reduces the amount of data that the join must process.
To speed up this query, simplify the join condition.
Jointure explosive (jointure imbriquée)¶
Une jointure qui inclut la sortie d’au moins une autre jointure renvoie beaucoup plus de lignes que dans les tables jointes. Cela peut indiquer un problème avec les conditions de jointure pour les jointures enfant.
Pour empêcher la jointure de produire plus de lignes que les tables jointes ne contiennent, ajoutez ou modifiez les conditions de jointure pour les jointures enfants. De plus, l’ajout d’une clause WHEREà une sous-requête utilisée dans une jointure enfant peut réduire le nombre de lignes renvoyées.
Jointure explosive (non imbriquée)¶
Une jointure de deux ensembles de données (par exemple, des tables, des vues ou la sortie à partir d’appels de fonctions de table) renvoie beaucoup plus de lignes que les tables jointes n’en contiennent. Cela peut indiquer un problème avec la condition de jointure.
Pour éviter que la jointure ne produise plus de lignes que celles présentes dans les tables jointes, ajoutez ou modifiez la condition de jointure. De plus, l’ajout d’une clause WHERE à une sous-requête utilisée par cette jointure peut réduire le nombre de lignes renvoyées.
Agrégation inutile¶
La clause DISTINCT ou GROUP BY produit le même nombre de lignes que la même instruction sans la clause DISTINCT ou GROUP BY. La spécification de la clause introduit une étape de traitement supplémentaire qui n’a aucun effet sur le résultat.
Pour améliorer les performances, supprimez la clause DISTINCT ou GROUP BY inutile.
Clause UNION [DISTINCT inutile]¶
La clause UNION [DISTINCT] n’est pas nécessaire car les ensembles d’entrée sont disjoints.
Pour améliorer les performances, utilisez UNION ALL, plutôt que UNION [DISTINCT].
Déversement distant¶
Cette requête a analysé plus de données que l’entrepôt n’en avait la capacité de stocker. En conséquence, l’entrepôt a déversé des données vers le stockage, ce qui a ralenti le traitement de la requête.
Pour éviter ce problème, utilisez un entrepôt plus grand qui a une plus grande capacité. Si l’utilisation d’un entrepôt plus grand n’est pas une option, modifiez la requête pour traiter les données par lots plus petits.
La requête est restée trop longtemps dans la file d’attente de l’entrepôt¶
Cette requête est restée trop longtemps dans la file d’attente de l’entrepôt.
Pour éviter ce problème, utilisez un entrepôt plus grand qui a plus de capacité, ou utilisez un entrepôt qui a moins de requêtes simultanées.
Affichage des insights sur les requêtes dans Snowsight¶
Dans l’onglet Profil de requête sous Query History, vous pouvez afficher les insights d’une requête. Les nœuds qui possèdent des insights correspondants sont mis en évidence.
Le panneau Query Insights, situé à droite, affiche chaque type d’insight détecté pour cette requête et répertorie chaque instance de ce type d’insight détecté pour la requête. Pour en savoir plus sur la condition détectée, sélectionnez View à côté d’une entrée dans le panneau Query Insights.
Les détails incluent les prochaines étapes recommandées pour améliorer les performances de la requête. Vous pouvez sélectionner Learn more pour afficher plus d’informations sur cet insight.
Limitations¶
Les insights sont générés pour les requêtes SQL exécutées sur des bases de données et traitées par des entrepôts.
Les insights ne sont pas produits pour :
Requêtes qui bénéficient potentiellement du service d’accélération des requêtes.
Requêtes pour lesquelles le plan de requête nécessite plusieurs étapes pour se terminer.
Des requêtes impliquant des objets sécurisés.
Des requêtes exécutées sur des tableaux hybrides (Unistore).
Requêtes générées par des Applications natives.
Requêtes EXPLAIN
Requêtes qui réutilisent des résultats .
Queries executing on interactive tables.