Schéma :

ACCOUNT_USAGE

Vue AGGREGATE_QUERY_HISTORY

Cette vue Account Usage vous permet de surveiller et de suivre l’exécution des instructions au fil du temps. Elle contient des données similaires à celles de la vue QUERY_HISTORY, mais elle est agrégée par intervalles d’une minute pour les instructions SQL répétées. Vous pouvez utiliser cette vue pour surveiller votre charge de travail et analyser les performances.

En plus des requêtes sur les tables hybrides, toutes les requêtes que vous exécutez dans Snowflake sont incluses dans AGGREGATE_QUERY_HISTORY. Cependant, AGGREGATE_QUERY_HISTORY est particulièrement utile pour surveiller et analyser les charges de travail Unistore qui exécutent un petit nombre d’instructions distinctes de manière répétée à un débit élevé.

Colonnes

Nom de la colonne

Type de données

Description

CALLS

NUMBER

Nombre de fois où l’instruction (requête + plan de requête) a été exécutée dans l’intervalle d’agrégation.

INTERVAL_START_TIME

TIMESTAMP_LTZ

Heure de début de la fenêtre de mesure (dans le fuseau horaire local).

INTERVAL_END_TIME

TIMESTAMP_LTZ

Heure de fin de la fenêtre de mesure (dans le fuseau horaire local).

QUERY_PARAMETERIZED_HASH

TEXT

ID unique pour identifier les requêtes paramétrées identiques. Voir Colonne QUERY_PARAMETERIZED_HASH.

QUERY_TEXT

TEXT

Texte d’exemple de l’instruction SQL.

DATABASE_ID

NUMBER

Identificateur interne/généré par le système pour la base de données utilisée.

DATABASE_NAME

TEXT

Base de données en cours d’utilisation au moment de la requête.

SCHEMA_ID

NUMBER

Identificateur interne / généré par le système pour le schéma utilisé.

SCHEMA_NAME

TEXT

Schéma en cours d’utilisation au moment de la requête.

QUERY_TYPE

TEXT

DML, requête, etc. Si la requête a échoué, le type de requête peut être UNKNOWN.

SESSION_ID

NUMBER

Session qui a exécuté l’instruction.

USER_NAME

TEXT

Utilisateur qui a émis la requête.

ROLE_NAME

TEXT

Rôle actif dans la session au moment de la requête.

ROLE_TYPE

TEXT

Spécifie APPLICATION, DATABASE_ROLE ou ROLE qui a exécuté la requête.

WAREHOUSE_ID

NUMBER

Identificateur interne / généré par le système pour l’entrepôt utilisé.

WAREHOUSE_NAME

TEXT

Entrepôt sur lequel la requête a été exécutée, le cas échéant.

WAREHOUSE_SIZE

TEXT

Taille de l’entrepôt lorsque cette instruction est exécutée.

WAREHOUSE_TYPE

TEXT

Type de l’entrepôt lorsque cette instruction est exécutée.

QUERY_TAG

TEXT

Balise de requête définie pour cette instruction via le paramètre de session QUERY_TAG.

IS_CLIENT_GENERATED_STATEMENT

BOOLEAN

Indique si la requête a été générée par le client.

RELEASE_VERSION

TEXT

Version de publication au format major_release.minor_release.patch_release.

ERRORS

ARRAY

Liste des codes d’erreur et des messages survenus pendant l’intervalle d’agrégation. Chaque erreur se présente sous le format {"code": "code1", "message": "msg1", "count": 10}.

TOTAL_ELAPSED_TIME

OBJECT

Temps écoulé (en millisecondes).

BYTES_SCANNED

OBJECT

Nombre d’octets analysés par cette instruction.

PERCENTAGE_SCANNED_FROM_CACHE

OBJECT

Pourcentage de données analysées à partir du cache du disque local. La valeur va de 0,0 à 1,0. Multipliez par 100 pour obtenir un vrai pourcentage.

BYTES_WRITTEN

OBJECT

Octets écrits (par exemple, lors du chargement dans une table).

BYTES_WRITTEN_TO_RESULT

OBJECT

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

BYTES_READ_FROM_RESULT

OBJECT

Octets lus à partir d’un objet de résultat.

ROWS_PRODUCED

OBJECT

Nombre de lignes produites par cette instruction.

ROWS_INSERTED

OBJECT

Nombre de lignes insérées par la requête.

ROWS_UPDATED

OBJECT

Nombre de lignes mises à jour par la requête.

ROWS_DELETED

OBJECT

Nombre de lignes supprimées par la requête.

ROWS_UNLOADED

OBJECT

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

BYTES_DELETED

OBJECT

Nombre d’octets supprimés par la requête.

PARTITIONS_SCANNED

OBJECT

Nombre de micro-partitions analysées.

PARTITIONS_TOTAL

OBJECT

Nombre total de micro-partitions de toutes les tables incluses dans cette requête.

BYTES_SPILLED_TO_LOCAL_STORAGE

OBJECT

Volume de données déversées sur le disque local (« spill to disk »).

BYTES_SPILLED_TO_REMOTE_STORAGE

OBJECT

Volume de données déversées sur le disque distant (« spill to disk »).

BYTES_SENT_OVER_THE_NETWORK

OBJECT

Quantité de données envoyées sur le réseau.

COMPILATION_TIME

OBJECT

Temps de compilation (en millisecondes).

EXECUTION_TIME

OBJECT

Temps d’exécution (en millisecondes).

QUEUED_PROVISIONING_TIME

OBJECT

Temps (en millisecondes) passé dans la file d’attente de l’entrepôt à attendre que les ressources de calcul de l’entrepôt soient provisionnées en raison de la création, de la reprise ou du redimensionnement de l’entrepôt.

QUEUED_REPAIR_TIME

OBJECT

Temps (en millisecondes) passé dans la file d’attente de l’entrepôt à attendre que les ressources de calcul de l’entrepôt soient réparées.

QUEUED_OVERLOAD_TIME

OBJECT

Temps (en millisecondes) passé dans la file d’attente d’entrepôt en raison de la surcharge de l’entrepôt par la charge de la requête actuelle.

TRANSACTION_BLOCKED_TIME

OBJECT

Temps (en millisecondes) passé à être bloquée par un DML simultané.

OUTBOUND_DATA_TRANSFER_CLOUD

TEXT

Fournisseur Cloud cible pour les instructions qui déchargent des données vers une autre région et/ou un autre Cloud.

OUTBOUND_DATA_TRANSFER_REGION

TEXT

Région cible pour les instructions qui déchargent des données dans une autre région et / ou cloud.

OUTBOUND_DATA_TRANSFER_BYTES

OBJECT

Nombre d’octets transférés dans les instructions qui déchargent des données vers une autre région et/ou un autre Cloud.

INBOUND_DATA_TRANSFER_CLOUD

TEXT

Fournisseur de Cloud source pour les instructions qui chargent des données provenant d’une autre région et/ou d’un Cloud.

INBOUND_DATA_TRANSFER_REGION

TEXT

Région source pour les instructions qui chargent des données d’une autre région et/ou d’un autre Cloud.

INBOUND_DATA_TRANSFER_BYTES

OBJECT

Nombre d’octets transférés lors d’une opération de réplication à partir d’un autre compte. Le compte source peut se trouver dans la même région ou dans une région différente du compte actuel.

LIST_EXTERNAL_FILES_TIME

OBJECT

Temps (en millisecondes) consacré à la liste des fichiers externes.

CREDITS_USED_CLOUD_SERVICES

OBJECT

Nombre de crédits utilisés pour les services Cloud.

EXTERNAL_FUNCTION_TOTAL_INVOCATIONS

OBJECT

Nombre total de fois que cette requête a appelé des services distants. Pour des détails importants, voir les notes d’utilisation.

EXTERNAL_FUNCTION_TOTAL_SENT_ROWS

OBJECT

Nombre total de lignes envoyées par cette requête dans tous les appels à tous les services distants.

EXTERNAL_FUNCTION_TOTAL_RECEIVED_ROWS

OBJECT

Nombre total de lignes que cette requête a reçues de tous les appels vers tous les services distants.

EXTERNAL_FUNCTION_TOTAL_SENT_BYTES

OBJECT

Nombre total d’octets que cette requête a envoyés dans tous les appels à tous les services distants.

EXTERNAL_FUNCTION_TOTAL_RECEIVED_BYTES

OBJECT

Nombre total d’octets que cette requête a reçus de tous les appels vers tous les services distants.

QUERY_LOAD_PERCENT

OBJECT

Pourcentage approximatif de ressources de calcul actives dans l’entrepôt pour cette exécution de requête.

QUERY_ACCELERATION_BYTES_SCANNED

OBJECT

Nombre d’octets analysés par le service d’accélération des requêtes.

QUERY_ACCELERATION_PARTITIONS_SCANNED

OBJECT

Nombre de partitions analysées par le service d’accélération des requêtes.

QUERY_ACCELERATION_UPPER_LIMIT_SCALE_FACTOR

OBJECT

Facteur d’échelle de limite supérieure dont aurait bénéficié une requête.

CHILD_QUERIES_WAIT_TIME

OBJECT

Temps (en millisecondes) pour compléter la recherche en cache lors de l’appel d’une fonction mémoïsable.

HYBRID_TABLE_REQUESTS_THROTTLED_COUNT

NUMBER

Nombre de requêtes de tables hybrides qui ont été limitées.

OWNER_ROLE_TYPE

TEXT

Type de rôle qui possède l’objet, soit ROLE ou DATABASE_ROLE. . Si une Snowflake Native App est propriétaire de l’objet, la valeur est APPLICATION. . Snowflake renvoie NULL si vous supprimez l’objet, car un objet supprimé n’a pas de rôle propriétaire.

Le type de données OBJECT contient les champs suivants :

Nom du champ

Description

sum

Somme de toutes les exécutions dans l’intervalle d’agrégation.

avg

Moyenne de toutes les exécutions dans l’intervalle d’agrégation.

stddev

Écart type de toutes les exécutions dans l’intervalle d’agrégation.

min

Minimum de toutes les exécutions dans l’intervalle d’agrégation.

median

Médiane de toutes les exécutions dans l’intervalle d’agrégation.

p90

90e centile de toutes les exécutions dans l’intervalle d’agrégation.

p99

99e centile de toutes les exécutions dans l’intervalle d’agrégation.

p99.9

99,9e centile de toutes les exécutions dans l’intervalle d’agrégation.

max

Maximum de toutes les exécutions dans l’intervalle d’agrégation.

Note

Les colonnes suivantes de type OBJECT ne contiennent pas de champ sum :

  • PERCENTAGE_SCANNED_FROM_CACHE

  • QUERY_LOAD_PERCENT

  • QUERY_ACCELERATION_UPPER_LIMIT_SCALE_FACTOR

Colonne QUERY_PARAMETERIZED_HASH

La colonne QUERY_PARAMETERIZED_HASH contient une valeur de hachage calculée sur la base de la requête paramétrée, c’est-à-dire la version de la requête après paramétrage de tous les littéraux.

Par exemple, les requêtes suivantes ont la même valeur QUERY_PARAMETERIZED_HASH :

SELECT * FROM table1 WHERE table1.name = 'TIM'
Copy
SELECT * FROM table1 WHERE table1.name = 'AIHUA'
Copy

La valeur QUERY_PARAMETERIZED_HASH est soumise aux restrictions suivantes :

  • La constante littérale doit faire partie des fonctions binaires suivantes sur les prédicats : equal, not equal, greater (or equal) than, smaller (or equal) than.

  • Les alias doivent être identiques.

Tant qu’il y a des différences dans le texte SQL, les valeurs QUERY_HASH et QUERY_PARAMETERIZED_HASH seront différentes, avec les exceptions suivantes :

  • L’identificateur/la variable de session/le nom de la zone de préparation sont insensibles à la casse.

  • Les différences d’espace blanc sont ignorées.

  • Les littéraux satisfaisant à la règle du prédicat binaire mentionnée ci-dessus.

Notes sur l’utilisation

La latence pour la vue peut atteindre 180 minutes (3 heures).

Exemples

Vous pouvez utiliser la vue AGGREGATE_QUERY_HISTORY pour surveiller les problèmes potentiels liés aux erreurs, à la mise en file d’attente, au blocage des verrous ou à la limitation des tables hybrides. En règle générale, il est souhaitable que ces paramètres soient constamment bas. Si vous constatez un pic dans l’une de ces mesures, cela peut indiquer un problème :

SET (START_DATE, END_DATE) = ('2023-11-01', '2023-11-08');

WITH time_issues AS
(
    SELECT
        interval_start_time
        , SUM(transaction_blocked_time:"sum") AS transaction_blocked_time
        , SUM(queued_provisioning_time:"sum") AS queued_provisioning_time
        , SUM(queued_repair_time:"sum") AS queued_repair_time
        , SUM(queued_overload_time:"sum") AS queued_overload_time
        , SUM(hybrid_table_requests_throttled_count) AS hybrid_table_requests_throttled_count
    FROM snowflake.account_usage.aggregate_query_history
    WHERE TRUE
        AND interval_start_time > $START_DATE
        AND interval_start_time < $END_DATE
    GROUP BY ALL
),
errors AS
(
    SELECT
        interval_start_time
        , SUM(value:"count") as error_count
    FROM
    (
        SELECT
            a.interval_start_time
            , e.*
        FROM
            snowflake.account_usage.aggregate_query_history a,
            TABLE(FLATTEN(input => errors)) e
        WHERE TRUE
            AND interval_start_time > $START_DATE
            AND interval_start_time < $END_DATE
    )
    GROUP BY ALL
)
SELECT
    time_issues.interval_start_time
    , error_count
    , transaction_blocked_time
    , queued_provisioning_time
    , queued_repair_time
    , queued_overload_time
    , hybrid_table_requests_throttled_count
FROM
    time_issues FULL JOIN errors ON errors.interval_start_time = time_issues.interval_start_time
;
Copy

Vous pouvez interroger la vue pour surveiller le débit et la simultanéité de votre charge de travail globale. De nombreuses charges de travail présentent un modèle cyclique régulier. Toute hausse ou baisse inattendue peut justifier une enquête.

Par exemple, surveillez le débit et la simultanéité pour l’entrepôt my_warehouse au cours de la première semaine de novembre :

SELECT
    interval_start_time
    , SUM(calls) AS execution_count
    , SUM(calls) / 60 AS queries_per_second
    , COUNT(DISTINCT session_id) AS unique_sessions
    , COUNT(user_name) AS unique_users
FROM snowflake.account_usage.aggregate_query_history
WHERE TRUE
    AND warehouse_name = 'MY_WAREHOUSE'
    AND interval_start_time > '2023-11-01'
    AND interval_start_time < '2023-11-08'
GROUP BY
    interval_start_time
;
Copy

Les requêtes les plus courantes et les plus répétées peuvent constituer un bon point de départ pour optimiser ou améliorer l’efficacité de votre charge de travail. Vous pouvez interroger la vue pour identifier les principales requêtes d’une charge de travail en fonction du nombre d’exécutions.

Par exemple, identifiez les principales requêtes par nombre d’exécutions pour l’entrepôt my_warehouse :

SELECT
    query_parameterized_hash
    , ANY_VALUE(query_text)
    , SUM(calls) AS execution_count
FROM snowflake.account_usage.aggregate_query_history
WHERE TRUE
    AND warehouse_name = 'MY_WAREHOUSE'
    AND interval_start_time > '2023-11-01'
    AND interval_start_time < '2023-11-08'
GROUP BY
    query_parameterized_hash
ORDER BY execution_count DESC
;
Copy

Identifiez les requêtes les plus lentes en fonction de la latence totale moyenne :

SELECT
    query_parameterized_hash
    , any_value(query_text)
    , SUM(total_elapsed_time:"sum"::NUMBER) / SUM (calls) as avg_latency
FROM snowflake.account_usage.aggregate_query_history
WHERE TRUE
    AND warehouse_name = 'MY_WAREHOUSE'
    AND interval_start_time > '2023-07-01'
    AND interval_start_time < '2023-07-08'
GROUP BY
    query_parameterized_hash
ORDER BY avg_latency DESC
;
Copy

Analysez les performances dans le temps pour une requête spécifique :

SELECT
    interval_start_time
    , total_elapsed_time:"avg"::number avg_elapsed_time
    , total_elapsed_time:"min"::number min_elapsed_time
    , total_elapsed_time:"p90"::number p90_elapsed_time
    , total_elapsed_time:"p99"::number p99_elapsed_time
    , total_elapsed_time:"max"::number max_elapsed_time
FROM snowflake.account_usage.aggregate_query_history
WHERE TRUE
    AND query_parameterized_hash = '<123456>'
    AND interval_start_time > '2023-07-01'
    AND interval_start_time < '2023-07-08'
ORDER BY interval_start_time DESC
;
Copy