- Schéma :
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 |
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 |
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 |
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, |
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 |
Le type de données OBJECT contient les champs suivants :
Nom du champ |
Description |
---|---|
Somme de toutes les exécutions dans l’intervalle d’agrégation. |
|
Moyenne de toutes les exécutions dans l’intervalle d’agrégation. |
|
Écart type de toutes les exécutions dans l’intervalle d’agrégation. |
|
Minimum de toutes les exécutions dans l’intervalle d’agrégation. |
|
Médiane de toutes les exécutions dans l’intervalle d’agrégation. |
|
90e centile de toutes les exécutions dans l’intervalle d’agrégation. |
|
99e centile de toutes les exécutions dans l’intervalle d’agrégation. |
|
99,9e centile de toutes les exécutions dans l’intervalle d’agrégation. |
|
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'
SELECT * FROM table1 WHERE table1.name = 'AIHUA'
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 ;
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
;
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
;
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
;
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
;