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 en interrogeant la vue QUERY_INSIGHTS.

Les sections suivantes fournissent des détails sur les insights de requête :

Liste des types d’insights

La vue QUERY_INSIGHTS fournit les informations, qui comprennent :

  • 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

QUERY_INSIGHT_NO_FILTER_ON_TOP_OF_TABLE_SCAN

Aucun filtre sur l’analyse de tableau

QUERY_INSIGHT_INAPPLICABLE_FILTER_ON_TABLE_SCAN

Filtre non applicable

QUERY_INSIGHT_UNSELECTIVE_FILTER

Filtre non sélectif

QUERY_INSIGHT_FILTER_WITH_CLUSTERING_KEY

Le filtre utilise une clé de clustering

QUERY_INSIGHT_SEARCH_OPTIMIZATION_USED

Requête bénéficiant de l’optimisation de la recherche

QUERY_INSIGHT_JOIN_WITH_NO_JOIN_CONDITION

Jointure sans condition de jointure

QUERY_INSIGHT_NESTED_EXPLODING_JOIN

Jointure explosive (jointure imbriquée)

QUERY_INSIGHT_EXPLODING_JOIN

Jointure explosive (non imbriquée)

QUERY_INSIGHT_REMOTE_SPILLAGE

Déversement distant

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.

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.

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.

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.

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.

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 :

    • 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 .