Surveillance de l’activité

La zone Activity de Snowsight, the Snowflake web interface vous permet d’effectuer les actions suivantes :

  • Surveiller les requêtes exécutées par les utilisateurs de votre compte.

  • Voir les détails des requêtes.

  • Voir les données de performance.

  • Explorer chaque zone de préparation d’une requête exécutée.

  • Surveiller le statut du chargement des données en utilisant COPY INTO (chargement en masse) et des canaux (chargement continu).

  • Voir les détails sur les instances de chargement de données en masse et continu.

  • Accéder à l’historique des copies de tables individuelles.

Cette rubrique décrit comment utiliser la zone Activity pour comprendre l’activité de votre compte Snowflake.

Dans ce chapitre :

Utilisation de la zone Activité

Cette section donne un bref aperçu de la manière d’utiliser la zone Activity de Snowsight.

La zone Activity comprend les pages suivantes :

Historique des requêtes

La page Query History vous permet de consulter et d’approfondir les détails des requêtes exécutées dans votre compte Snowflake au cours des 14 derniers jours. La page Query History est la page par défaut de la zone Activity. La page Query History fournit un tableau détaillé des requêtes.

Cette section donne un bref aperçu de la manière de naviguer dans la page Query History et de la façon de l’utiliser.

Interface

Description

Filtres de base

Utilisez les filtres, situés dans le coin supérieur droit de la page, pour filtrer le tableau. Vous pouvez filtrer par :

  • Status

    • All (par défaut)

    • Queued

    • Blocked

    • Running

    • Failed

    • Successful

  • User

    • All

    • L’utilisateur sous lequel vous vous êtes connecté (par défaut)

    • Utilisateurs individuels de Snowflake dans votre compte

Filtres supplémentaires

Utilisez Filters, situé dans le coin supérieur droit de la page, afin de définir des filtres supplémentaires pour les requêtes. Vous pouvez filtrer par :

  • SQL Text

  • Query ID

  • Warehouse

  • Duration

  • Session ID

  • Query Tag

  • Client generated statements

  • Queries executed by user tasks

Colonnes

Utilisez Columns, dans le coin supérieur droit de la page, pour ajouter ou supprimer des colonnes du tableau. Le tableau des requêtes comprend les colonnes suivantes :

  • All

  • SQL Text (par défaut)

  • Query ID (par défaut)

  • Status (par défaut)

  • User (par défaut)

  • Warehouse (par défaut)

  • Duration (par défaut)

  • Started (par défaut)

  • End Time

  • Session ID

  • Client Driver

  • Bytes Scanned

  • Cluster Number

  • Rows

  • Query Tag

Actualisation automatique

Dans le coin supérieur droit de la page, activez l’option Auto Refresh. Lorsque l’option Auto Refresh est activée, la table est actualisée toutes les dix secondes.

Le tableau des requêtes comprend les colonnes suivantes par défaut :

  • SQL Text

  • Query ID

  • Status

  • User

  • Warehouse

  • Duration

  • Started

Vous pouvez ajouter des colonnes supplémentaires.

Pour voir des détails supplémentaires sur une requête, sélectionnez une requête dans le tableau.

Requête

Lorsque vous sélectionnez une requête dans le tableau des requêtes, la page des requêtes apparaît.

Cette section donne un bref aperçu de la manière de naviguer et d’utiliser la page des requêtes.

Interface

Description

Détails de base

Les détails de base concernant la requête se trouvent en haut de la page.

Onglets de la page des requêtes

La page des requêtes comprend les onglets suivants :

  • Query Details

  • Query Profile

Détails de la requête

L’onglet Query Details tab fournit les résultats de la requête ainsi que des informations supplémentaires. L’onglet Query Details tab est l’onglet par défaut de la page des requêtes. L’onglet Query Details tab fournit les sections suivantes :

  • Details

  • SQL Text

  • Results

La section Details fournit des informations supplémentaires sur l’exécution de la requête, notamment :

  • Le statut de la requête.

  • Quand la requête a commencé.

  • Quand la requête s’est terminée.

  • La durée de la requête.

  • L’ID de la requête.

  • L’ID de la session.

  • Le statut du pilote.

  • Le pilote du client.

La section SQL Text fournit le texte réel de la requête. Passez la souris sur le texte SQL pour ouvrir le texte dans une feuille de calcul ou copier le texte.

La section Results fournit les résultats de la requête. Sélectionnez Export Query pour exporter les résultats dans un fichier .csv.

Profil de requête

L’onglet Query Profile vous permet d’explorer le plan d’exécution de la requête et de comprendre les détails granulaires de chaque étape de l’exécution.

Le profil de requête est un outil puissant permettant de comprendre la mécanique des requêtes. Il peut être utilisé quand vous avez besoin d’en savoir plus sur les performances ou le comportement d’une requête particulière. Il est conçu pour vous aider à repérer les erreurs classiques dans les expressions de requête SQL afin d’identifier les problèmes de performance et les possibilités d’amélioration.

Cette section fournit un bref aperçu de la manière de naviguer dans le profil de requête et de l’utiliser.

Interface

Description

Plan d’exécution des requêtes

Le plan d’exécution de la requête apparaît au centre du profil de la requête.

Le plan d’exécution de la requête est composé de nœuds d’opérateurs, qui représentent les opérateurs rowset.

Les flèches entre les nœuds d’opérateurs indiquent les rowsets qui sortent d’un opérateur et entrent dans un autre.

Noeud d’opérateur

Chaque nœud d’opérateur comprend les éléments suivants :

  • Le type d’opérateur et numéro d’ID.

  • Le temps utilisé pour exécuter cet opérateur, représenté en pourcentage de la durée de la requête.

  • Un aperçu des détails de l’opérateur. Par exemple, le nom d’une table ou une liste d’expressions.

Navigation dans le profil des requêtes

Dans le coin supérieur gauche du profil des requêtes, utilisez les boutons pour :

  • Effectuer un déplacement entre les étapes d’exécution.

  • Ajuster le plan d’exécution de la requête dans la fenêtre.

  • Effectuer un zoom avant et arrière sur le plan d’exécution de la requête.

Note

Les étapes n’apparaissent que si la requête a été exécutée par étapes.

Volets d’informations

Le profil de requêtes fournit plusieurs volets d’informations. Les volets apparaissent dans le plan d’exécution de la requête. Les volets qui apparaissent dépendent de l’orientation du plan d’exécution de la requête.

Le profil de requête comprend les volets d’information suivants :

  • Profile Overview

  • Statistics

  • Most Expensive Nodes

  • Attributes

Pour en savoir plus sur les informations disponibles dans ces volets, voir Référence à l’historique des requêtes.

Référence à l’historique des requêtes

Cette section décrit tous les éléments qui peuvent apparaître dans chaque volet d’informations. Le contenu exact des volets d’informations dépend du contexte du plan d’exécution de la requête.

Aperçu du profil

Le volet fournit des informations sur les tâches de traitement qui ont consommé du temps de requête. Le temps d’exécution indique le temps attribué à chaque tâche durant le traitement d’une requête. Le temps passé peut être réparti dans les catégories suivantes :

  • Processing — le temps consacré au traitement des données par le CPU.

  • Local Disk IO — l’heure à laquelle le traitement a été bloqué par l’accès au disque local.

  • Remote Disk IO — l’heure à laquelle le traitement a été bloqué par l’accès au disque distant.

  • Network Communication — l’heure à laquelle le traitement attendait le transfert des données réseau.

  • Synchronization — diverses activités de synchronisation entre les processus participants.

  • Initialization — le temps passé à configurer le traitement de la requête.

Statistiques

Les diverses statistiques, regroupées dans les sections suivantes, constituent une source importante d’informations dans le panneau de détails :

  • IO — informations sur les opérations d’entrée-de sortie effectuées pendant la requête :

    • Progression de l’analyse — le pourcentage de données analysées pour une table donnée jusqu’à présent.

    • Octets analysés — le nombre d’octets analysés jusqu’à présent.

    • Pourcentage de données analysées à partir du cache — le pourcentage de données analysées à partir du cache du disque local.

    • Octets écrits — octets écrits (par exemple lors du chargement dans une table).

    • Octets écrits dans le résultat — octets écrits dans l’objet de résultat. Par exemple, select * from . . . produirait un jeu de résultats sous forme de tableau représentant chaque champ de la sélection. En général, l’objet de résultats représente tout ce qui est produit comme résultat de la requête, et Octets écrits dans le résultat représente la taille du résultat retourné.

    • Octets lus à partir d’un résultat — octets lus à partir de l’objet de résultat.

    • Octets externes analysés — octets lus à partir d’un objet externe, par exemple une zone de préparation.

  • DML — Statistiques des requêtes Data Manipulation Language (DML) :

    • Nombre de lignes insérées — nombre de lignes insérées dans une ou plusieurs tables.

    • Nombre de lignes mises à jour — nombre de lignes mises à jour dans une table.

    • Nombre de lignes supprimées — nombre de lignes supprimées dans une table.

    • Nombre de lignes déchargées — nombre de lignes déchargées lors de l’exportation des données.

  • Pruning — informations sur les effets de l’élagage de table :

    • Partitions analysées — nombre de partitions analysées jusqu’à présent.

    • Nombre total de partitions — nombre total de partitions dans une table donnée.

  • Spilling — informations sur l’utilisation du disque pour les opérations où les résultats intermédiaires ne rentrent pas dans la mémoire :

    • Octets déversés sur le stockage local — volume de données déversées sur le disque local (« spill to disk »).

    • Octets déversés sur le stockage distant — volume de données déversées sur le disque distant (« spill to disk »).

  • Network — communication réseau :

    • Octets envoyés sur le réseau — quantité de données envoyées sur le réseau.

  • External Functions — informations sur les appels à des fonctions externes :

    Les statistiques suivantes sont affichées pour chaque fonction externe appelée par l’instruction SQL. Si la même fonction a été appelée plusieurs fois à partir de la même instruction SQL, les statistiques sont agrégées.

    • Nombre total d’appels — Le nombre de fois qu’une fonction externe a été appelée. (Cela peut être différent du nombre d’appels de fonctions externes dans le texte de l’instruction SQL en raison du nombre de lots dans lesquels les lignes sont divisées, du nombre de tentatives (en cas de problèmes de réseau transitoires), etc.)

    • Lignes envoyées — Nombre de lignes envoyées aux fonctions externes.

    • Lignes reçues — Nombre de lignes reçues en retour de fonctions externes.

    • Octets envoyés (entre régions) — Le nombre d’octets envoyés aux fonctions externes. Si le libellé inclut « (entre régions) », les données ont été envoyées entre plusieurs régions (ce qui peut avoir un impact sur la facturation).

    • Octets reçus (entre régions) — Nombre d’octets reçus depuis des fonctions externes. Si le libellé inclut « (entre régions) », les données ont été envoyées entre plusieurs régions (ce qui peut avoir un impact sur la facturation).

    • Tentatives en raison d’erreurs transitoires — Le nombre de tentatives en raison d’erreurs transitoires.

    • Latence moyenne par appel — La durée moyenne par appel entre le moment où Snowflake a envoyé les données et reçu les données renvoyées.

    Si la valeur d’un champ, par exemple « Tentatives en raison d’erreurs transitoires » est nulle, le champ n’est pas affiché.

Nœuds les plus coûteux

Le volet liste tous les nœuds qui ont duré 1 % ou plus du temps total d’exécution de la requête (ou le temps d’exécution de l’étape de requête affichée, si la requête a été exécutée en plusieurs étapes de traitement). Le volet liste les nœuds par temps d’exécution par ordre décroissant, ce qui permet aux utilisateurs de localiser rapidement les nœuds les plus coûteux en termes de temps d’exécution.

Attributs

Les sections suivantes fournissent une liste des types d’opérateurs les plus courants et de leurs attributs :

Opérateurs d’accès et de production de données
TableScan

Représente l’accès à une table unique. Attributs :

  • Nom complet de la table — le nom de la table accédée, y compris la base de données et le schéma.

  • Colonnes — liste des colonnes analysées.

  • Alias de table — alias de table utilisé, le cas échéant.

  • Chemins de variante extraits — liste des chemins extraits à partir des colonnes VARIANT.

ValuesClause

Liste des valeurs fournies avec la clause VALUES. Attributs :

  • Nombre de valeurs — le nombre de valeurs produites.

  • Valeurs — la liste de valeurs produites.

Générateur

Génère des enregistrements à l’aide de la construction TABLE(GENERATOR(...)). Attributs :

  • rowCount — paramètre rowCount fourni.

  • timeLimit — paramètre timeLimit fourni.

ExternalScan

Représente l’accès aux données stockées dans les objets de zone de préparation. Peut faire partie des requêtes qui analysent directement les données des zones de préparation, mais aussi pour les opérations de chargement des données (comme les instructions COPY).

Attributs :

  • Nom de zone de préparation — le nom de la zone de préparation à partir de laquelle les données sont lues.

  • Type de zone de préparation — le type de la zone de préparation (p. ex. TABLE STAGE).

InternalObject

Représente l’accès à un objet de données interne (par exemple, une table de schéma d’information ou le résultat d’une requête précédente). Attributs :

  • Nom d’objet — le nom ou le type de l’objet accédé.

Opérateurs de traitement de données
Filtre

Représente une opération qui filtre les enregistrements. Attributs :

  • Condition de filtre - la condition utilisée pour effectuer le filtrage.

Joindre

Combine deux entrées sur une condition donnée. Attributs :

  • Type de jointure — Type de jointure (par ex. INNER, LEFT OUTER, etc.).

  • Condition de jointure d’égalité — pour les jointures qui utilisent des conditions basées sur l’égalité, cet attribut répertorie les expressions utilisées pour joindre les éléments.

  • Condition de jonction supplémentaire — certaines jonctions utilisent des conditions contenant des prédicats non basés sur l’égalité. Elles sont répertoriées ici.

Note

Les prédicats de jonction de non-égalité pourraient entraîner des vitesses de traitement beaucoup plus lentes et doivent être évités dans la mesure du possible.

Agrégat

Regroupe les entrées et calcule les fonctions d’agrégat. Peut représenter des constructions SQL, telles que GROUP BY et SELECT DISTINCT. Attributs :

  • Clés de groupement — si GROUP BY est utilisé, cela répertorie les expressions utilisées pour le groupement.

  • Fonctions d’agrégat – répertorie les fonctions calculées pour chaque groupe d’agrégats, p. ex. SUM.

GroupingSets

Représente des constructions, telles que GROUPING SETS, ROLLUP et CUBE. Attributs :

  • Ensembles de clés de groupement — liste des ensembles de groupement.

  • Fonctions d’agrégat — liste des fonctions calculées pour chaque groupe, p. ex. SUM.

WindowFunction

Calcule les fonctions de la fenêtre. Attributs :

  • Fonctions de la fenêtre — liste des fonctions de la fenêtre calculées.

Trier

Entrée d’ordres sur une expression donnée. Attributs :

  • Clés de tri — expression définissant l’ordre de tri.

SortWithLimit

Produit une partie de la séquence d’entrée après le tri, généralement le résultat d’une construction ORDER BY ... LIMIT ... OFFSET ... dans SQL.

Attributs :

  • Clés de tri — expression définissant l’ordre de tri.

  • Nombre de lignes — nombre de lignes produites.

  • Décalage — position dans la séquence ordonnée à partir de laquelle les tuples produits sont émis.

Aplatir

Traite les enregistrements VARIANT, en les aplatissant éventuellement sur un chemin spécifié. Attributs :

  • Entrée — l’expression d’entrée utilisée pour aplatir les données.

JoinFilter

Opération de filtrage spéciale qui enlève les tuples qui peuvent être identifiés comme ne correspondant pas à l’état d’une jonction plus loin dans le plan de requête. Attributs :

  • ID de jonction d’origine — la jonction utilisée pour identifier les tuples qui peuvent être filtrées.

UnionAll

Procède à la concaténation de deux entrées. Attributs : aucun.

ExternalFunction

Représente le traitement par une fonction externe.

Opérateurs DML
Insérer

Ajoute des enregistrements à une table via une opération INSERT ou COPY. Attributs :

  • Expressions d’entrée — les expressions insérées.

  • Noms de table — noms des tables auxquelles les enregistrements sont ajoutés.

Supprimer

Supprime des enregistrements d’une table. Attributs :

  • Nom de table — le nom de la table dont les enregistrements sont supprimés.

Mettre à jour

Met à jour les enregistrements d’une table. Attributs :

  • Nom de table — le nom de la table mise à jour.

Fusionner

Effectue une opération MERGE sur une table. Attributs :

  • Nom de table complet — le nom de la table mise à jour.

Décharger

Représente une opération COPY qui exporte les données d’une table vers un fichier dans une zone de préparation. Attributs :

  • Emplacement - le nom de la zone de préparation où les données sont sauvegardées.

Opérateurs de métadonnées

Certaines requêtes comprennent des étapes qui sont de pures opérations de métadonnées/de catalogue plutôt que des opérations de traitement de données. Ces étapes se composent d’un seul opérateur. Quelques exemples :

Commandes DDL et de transactions

Utilisées pour créer ou modifier des objets, des sessions, des transactions, etc. Généralement, ces requêtes ne sont pas traitées par un entrepôt virtuel et donnent lieu à un profil à une seule étape correspondant à l’instruction SQL correspondante. Par exemple :

CREATE DATABASE | SCHEMA | …

ALTER DATABASE | SCHEMA | TABLE | SESSION | …

DROP DATABASE | SCHEMA | TABLE | …

COMMIT

Commande de création de table

Commande DDL pour créer une table. Par exemple :

CREATE TABLE

Comme les autres commandes DDL, ces requêtes donnent un profil à une seule étape. Cependant, elles peuvent aussi faire partie d’un profil à plusieurs étapes, comme lorsqu’elles sont utilisées dans une instruction CTAS. Par exemple :

CREATE TABLE … AS SELECT …

Réutilisation de résultats de requête

Une requête qui réutilise le résultat d’une requête précédente.

Résultat basé sur les métadonnées

Requête dont le résultat est calculé à partir de métadonnées uniquement, sans accéder à aucune donnée. Ces requêtes ne sont pas traitées par un entrepôt virtuel. Par exemple :

SELECT COUNT(*) FROM …

SELECT CURRENT_DATABASE()

Opérateurs divers
Résultat

Renvoie le résultat de la requête. Attributs :

  • Liste des expressions - les expressions produites.

Problèmes de requête courants identifiés par le profil de requête

Cette section décrit les problèmes que vous pouvez identifier et résoudre à l’aide du profil de requête.

« Explosion » de jonctions

L’une des erreurs courantes des utilisateurs de SQL est de joindre des tables sans fournir de condition de jonction (résultant en un « produit cartésien »), ou de fournir une condition où les enregistrements d’une table correspondent à plusieurs enregistrements d’une autre table. Pour de telles requêtes, l’opérateur Join produit significativement plus de tuples qu’il n’en consomme (souvent par ordre de grandeur).

Ceci peut être observé en regardant le nombre d’enregistrements produits par un opérateur Join, et se reflète généralement aussi dans un opérateur Join chronophage.

UNION sans ALL

Dans SQL, il est possible de combiner deux ensembles de données avec les constructions UNION ou UNION ALL. La différence est que UNION ALL concatène simplement les entrées, tandis que UNION fait la même chose, mais supprime également les doublons.

Une erreur classique est d’utiliser UNION alors que la sémantique UNION ALL est suffisante. Ces requêtes apparaissent dans le profil de requête en tant qu’opérateur UnionAll avec un opérateur Aggregate supplémentaire (qui effectue l’élimination des doublons).

Requêtes trop volumineuses pour la mémoire

Pour certaines opérations (par exemple l’élimination des doublons dans un grand ensemble de données), la quantité de mémoire disponible pour les serveurs utilisée pour exécuter l’opération peut ne pas être suffisante pour contenir les résultats intermédiaires. En conséquence, le moteur de traitement des requêtes commencera à déverser les données sur le disque local. Si l’espace disque local n’est pas suffisant, les données déversées sont alors enregistrées sur des disques distants.

Ce déversement peut avoir un effet important sur les performances de la requête (surtout si le disque distant est utilisé pour le déversement). Pour remédier à cette situation, nous recommandons les choses suivantes :

  • Utilisez un entrepôt plus grand (ce qui a pour effet d’augmenter l’espace mémoire/espace disque local disponible pour l’opération), et/ou

  • Traitez les données par lots de plus petite taille.

Élagage inefficace

Snowflake collecte des statistiques complètes sur les données lui permettant de ne pas lire les parties inutiles d’une table selon les filtres de requête. Toutefois, pour que cela ait un effet, l’ordre de stockage des données doit être corrélé avec les attributs du filtre de requête.

L’efficacité de l’élagage s’observe en comparant les statistiques Partitions analysées et Nombre total de partitions dans les opérateurs TableScan. Si la première est une petite fraction de la seconde, alors l’élagage est efficace. Dans le cas contraire, l’élagage n’a eu aucun effet.

Bien entendu, l’élagage ne peut aider que pour les requêtes qui filtrent réellement une quantité importante de données. Si les statistiques d’élagage n’indiquent pas de réduction de données, mais qu’il y a un opérateur Filter au-dessus de TableScan qui filtre un certain nombre d’enregistrements, cela peut indiquer qu’une autre organisation des données pourrait être utile pour cette requête.

Pour plus d’informations sur l’élagage, voir Fonctionnement des structures de table dans Snowflake.

Historique de copie

L”Copy History page vous permet de voir l’activité de chargement de données qui s’est produite au cours des 365 derniers jours pour toutes les tables de votre compte. L”Copy History page fournit un tableau détaillé des charges de données pour vos tables.

L”Copy History page comprend les éléments suivants :

  • Le graphique Copies Over Time.

  • La table Copies.

L’activité sur l”Copy History page comprend le chargement de données en masse effectué à l’aide de COPY INTO et le chargement de données continu à l’aide de canaux.

L’historique de chargement des données provient de la vue Account Usage COPY_HISTORY. Cette vue nécessite un accès à la base de données Snowflake. Pour plus d’informations, voir Activation d’Account Usage pour d’autres rôles.

Cette section fournit un bref aperçu de la manière de naviguer dans l”Copy History page et de la façon de l’utiliser.

Interface

Description

Copies au fil du temps

Le graphique Copies Over Time permet de voir le chargement des données sur une période de temps donnée. Par défaut, le graphique présente un historique de 28 jours.

Les barres du graphique représentent les jours. Sélectionnez une barre sur le graphique pour filtrer le tableau Copies sur ce jour.

Filtrer les activités

Dans le coin supérieur droit de la page, filtrez le graphique Copies Over Time et le tableau Copies. Vous pouvez filtrer par :

  • Intervalle de temps

    • Last day

    • Last 7 days

    • Last 28 days (par défaut)

    • Last 3 months

    • Last 6 months

    • Last 12 months

    • All Time

    • Custom

  • Status

    • All (par défaut)

    • In progress

    • Loaded

    • Failed

    • Partially loaded

    • Skipped

  • Database

    • All (par défaut)

    • Une base de données individuelle

  • Schema

    • All (par défaut)

    • Un schéma individuel

  • Pipe

    • All (par défaut)

    • Un canal individuel

Entrepôt

L”Copy History page nécessite un entrepôt. L”Snowsight utilise l’entrepôt par défaut pour votre profil d’utilisateur.

Si vous ne voyez pas le contenu attendu ou si vous voulez changer d’entrepôt, sélectionnez un entrepôt dans le coin supérieur droit de la page.

Dans le coin supérieur droit du tableau Copies recherchez le contenu des colonnes suivantes :

  • File Name

  • Database

  • Schema

  • Table

  • Pipe

Ouvrir la feuille de calcul

Dans le coin supérieur droit de la table Copies ouvrez une feuille de calcul qui contient la requête SQL utilisée pour alimenter l”Copy History page.

La requête SQL est basée sur les filtres que vous sélectionnez.

Copier le chemin de la zone de préparation

Dans chaque ligne du tableau Copies copiez le chemin d’accès à la zone de préparation pour le chargement de données correspondant.

Le tableau Copies comprend les colonnes suivantes :

  • File Name

  • Database

  • Schema

  • Table

  • Pipe

  • Loaded

  • Size

  • Rows

  • Status

  • Location

Le tableau Copies fournit des informations sur les erreurs en cas d’échec du chargement des données. Pour comprendre pourquoi un chargement de données a échoué, dans la colonne de statut, survolez le statut Failed du chargement de données.

Pour voir l’historique des copies pour un tableau spécifique, sélectionnez un chargement de données dans le tableau Copies. Vous êtes envoyé vers l’historique des copies pour le tableau qui était la cible du chargement de données.

Revenir au début