Exploration des temps d’exécution¶
Cette rubrique explique comment examiner les performances passées des requêtes et des tâches. Ces informations permettent d’identifier les candidats à l’optimisation des performances et de voir si vos stratégies d’optimisation ont l’effet escompté.
Vous pouvez découvrir l’historique des performances en utilisant Snowsight ou en écrivant des requêtes sur les vues du schéma ACCOUNT_USAGE. Un utilisateur n’ayant pas accès au schéma ACCOUNT_USAGE peut interroger des données similaires à l’aide de l’Information Schema.
Affichage des temps d’exécution et chargement¶
Vous pouvez utiliser Snowsight pour obtenir des informations visuelles sur la performance des requêtes et des tâches ainsi que sur la charge d’un entrepôt.
- Requêtes:
Connectez-vous à Snowsight.
Sélectionnez Monitoring » Query History.
Utilisez la colonne Duration pour comprendre le temps d’exécution d’une requête. Vous pouvez trier la colonne pour trouver les requêtes les plus longues.
Si vous souhaitez vous concentrer sur les requêtes d’un utilisateur particulier, utilisez le menu déroulant User pour sélectionner l’utilisateur.
Si vous souhaitez vous concentrer sur les requêtes qui ont été exécutées sur un entrepôt particulier, sélectionnez Filters » Warehouse, puis l’entrepôt.
- Entrepôts:
Connectez-vous à Snowsight.
Passez à un rôle qui a des privilèges sur l’entrepôt.
Sélectionnez Admin » Warehouses.
Sélectionnez un entrepôt.
Utilisez le graphique Warehouse Activity pour visualiser la charge de l’entrepôt, y compris les requêtes en attente.
- Tâches:
Connectez-vous à Snowsight.
Sélectionnez Monitoring » Task History pour afficher le temps nécessaire à l’exécution du code SQL d’une tâche.
Analyse approfondie des temps d’exécution¶
Le profil de requête vous permet d’examiner les parties d’une requête dont l’exécution est la plus longue. Il comprend un volet Most Expensive Nodes qui identifie les nœuds de l’opérateur dont l’exécution est la plus longue. Vous pouvez aller encore plus loin en visualisant le pourcentage du temps d’exécution d’un nœud consacré à une catégorie particulière de traitement des requêtes.
Pour accéder au profil de requête d’une requête :
Connectez-vous à Snowsight.
Sélectionnez Monitoring » Query History.
Sélectionnez l’ID d’une requête.
Sélectionnez l’onglet Query Profile.
Astuce
Vous pouvez accéder par programme aux statistiques de performance du profil de requête en exécutant la fonction GET_QUERY_OPERATOR_STATS.
Rédaction de requêtes pour explorer les temps d’exécution¶
Le schéma Account Usage contient des vues relatives aux temps d’exécution des requêtes et des tâches. Il contient également une vue relative à la charge d’un entrepôt lorsqu’il exécute des requêtes. Vous pouvez écrire des requêtes à partir de ces vues pour analyser de façon approfondie les données de performance et créer des rapports et des tableaux de bord personnalisés.
Par défaut, seul l’administrateur du compte (c’est-à-dire l’utilisateur ayant le rôle ACCOUNTADMIN) peut accéder aux vues du schéma ACCOUNT_USAGE. Pour permettre à d’autres utilisateurs d’accéder à ces vues, reportez-vous à Activation de l’utilisation de la base de données SNOWFLAKE pour d’autres rôles.
Les utilisateurs qui n’ont pas accès au schéma ACCOUNT_USAGE (par exemple, un utilisateur qui a exécuté une requête ou un administrateur d’entrepôt) peuvent toujours obtenir les temps d’exécution récents et d’autres métadonnées de requête en utilisant les fonctions de table QUERY_HISTORY de l’Information Schema.
Il faut savoir que les vues ACCOUNT_USAGE ne sont pas mises à jour immédiatement après l’exécution d’une requête ou d’une tâche. Si vous souhaitez vérifier le temps d’exécution d’une requête juste après l’avoir exécutée, utilisez Snowsight pour visualiser ses performances. L’Information Schema est également mis à jour plus rapidement que les vues ACCOUNT_USAGE.
Vue ACCOUNT_USAGE |
Description |
Latence |
---|---|---|
Permet d’analyser l’historique des requêtes Snowflake selon différentes dimensions (plage de temps, temps d’exécution, session, utilisateur, entrepôt, etc.) au cours des 365 derniers jours (1 an). |
Jusqu’à 45 minutes |
|
Permet d’analyser la charge de travail d’un entrepôt dans une plage de dates spécifiée. |
Jusqu’à 3 heures |
|
Permet de récupérer l’historique de l’utilisation des tâches au cours des 365 derniers jours (1 an). |
Jusqu’à 45 minutes |
Exemples de requêtes¶
Les requêtes suivantes sur le schéma ACCOUNT_USAGE donnent un aperçu des performances passées des requêtes, des entrepôts et des tâches. Cliquez sur le nom d’une requête pour voir l’exemple SQL complet.
- Performances de la requête.:
- Charge d’entrepôt:
- Performance des tâches:
Performances des requêtes¶
Requête : les n requêtes les plus longues¶
Cette requête fournit une liste des n (50 dans l’exemple ci-dessous) requêtes les plus longues au cours de la dernière journée. Vous pouvez ajuster la fonction DATEADD
pour vous focaliser sur une période plus courte ou plus longue. Remplacez my_warehouse
par le nom d’un entrepôt.
SELECT query_id,
ROW_NUMBER() OVER(ORDER BY partitions_scanned DESC) AS query_id_int,
query_text,
total_elapsed_time/1000 AS query_execution_time_seconds,
partitions_scanned,
partitions_total,
FROM snowflake.account_usage.query_history Q
WHERE warehouse_name = 'my_warehouse' AND TO_DATE(Q.start_time) > DATEADD(day,-1,TO_DATE(CURRENT_TIMESTAMP()))
AND total_elapsed_time > 0 --only get queries that actually used compute
AND error_code IS NULL
AND partitions_scanned IS NOT NULL
ORDER BY total_elapsed_time desc
LIMIT 50;
Requête : requêtes organisées par temps d’exécution au cours du dernier mois¶
Cette requête regroupe les requêtes pour un entrepôt donné par compartiments pour le temps d’exécution ou cours du dernier mois. Ces tendances dans le temps d’exécution des requêtes peuvent aider à prendre des décisions pour redimensionner les entrepôts ou séparer certaines requêtes vers un autre entrepôt. Remplacez MY_WAREHOUSE
par le nom d’un entrepôt.
SELECT
CASE
WHEN Q.total_elapsed_time <= 60000 THEN 'Less than 60 seconds'
WHEN Q.total_elapsed_time <= 300000 THEN '60 seconds to 5 minutes'
WHEN Q.total_elapsed_time <= 1800000 THEN '5 minutes to 30 minutes'
ELSE 'more than 30 minutes'
END AS BUCKETS,
COUNT(query_id) AS number_of_queries
FROM snowflake.account_usage.query_history Q
WHERE TO_DATE(Q.START_TIME) > DATEADD(month,-1,TO_DATE(CURRENT_TIMESTAMP()))
AND total_elapsed_time > 0
AND warehouse_name = 'my_warehouse'
GROUP BY 1;
Requête : recherchez les requêtes répétées les plus longues¶
Vous pouvez utiliser le hachage de la requête (la valeur de la colonne query_hash
dans la vue ACCOUNT_USAGE QUERY_HISTORY) pour trouver des modèles de performance des requêtes qui pourraient ne pas être évidents. Par exemple, bien qu’une requête puisse ne pas être excessivement coûteuse lors d’une seule exécution, une requête fréquemment répétée peut entraîner des coûts élevés, en fonction du nombre d’exécutions de la requête.
Vous pouvez utiliser le hachage de requête pour identifier les requêtes que vous devriez optimiser en priorité. Par exemple, la requête suivante utilise la valeur de la colonne query_hash
pour identifier les IDs de requête parmi les 100 requêtes les plus longues :
SELECT
query_hash,
COUNT(*),
SUM(total_elapsed_time),
ANY_VALUE(query_id)
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY
WHERE warehouse_name = 'MY_WAREHOUSE'
AND DATE_TRUNC('day', start_time) >= CURRENT_DATE() - 7
GROUP BY query_hash
ORDER BY SUM(total_elapsed_time) DESC
LIMIT 100;
Requête : suivez la performance moyenne d’une requête dans le temps¶
L’instruction suivante calcule la moyenne quotidienne du temps total écoulé pour toutes les requêtes ayant un hachage de requête paramétré spécifique (cbd58379a88c37ed6cc0ecfebb053b03
).
SELECT
DATE_TRUNC('day', start_time),
SUM(total_elapsed_time),
ANY_VALUE(query_id)
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY
WHERE query_parameterized_hash = 'cbd58379a88c37ed6cc0ecfebb053b03'
AND DATE_TRUNC('day', start_time) >= CURRENT_DATE() - 30
GROUP BY DATE_TRUNC('day', start_time);
Charge d’entrepôt¶
Requête : charge totale de l’entrepôt¶
Cette requête permet de connaître la charge totale d’un entrepôt pour les requêtes exécutées et en attente. Ces valeurs de charge représentent le rapport entre le temps d’exécution total (en secondes) de toutes les requêtes dans un état spécifique dans un intervalle et le temps total (en secondes) pour cet intervalle.
Par exemple, si « 276 secondes » était le temps total pour 4 requêtes dans un intervalle de 5 minutes (300 secondes), alors la valeur de la charge de requête est 276 / 300 = 0,92.
SELECT TO_DATE(start_time) AS date,
warehouse_name,
SUM(avg_running) AS sum_running,
SUM(avg_queued_load) AS sum_queued
FROM snowflake.account_usage.warehouse_load_history
WHERE TO_DATE(start_time) >= DATEADD(month,-1,CURRENT_TIMESTAMP())
GROUP BY 1,2
HAVING SUM(avg_queued_load) >0;
Performances des tâches¶
Requête : tâches les plus longues¶
Cette requête répertorie les tâches les plus longues exécutées au cours de la dernière journée, ce qui peut indiquer une possibilité d’optimiser le code SQL exécuté par la tâche.
SELECT DATEDIFF(seconds, query_start_time,completed_time) AS duration_seconds,*
FROM snowflake.account_usage.task_history
WHERE state = 'SUCCEEDED'
AND query_start_time >= DATEADD (day, -1, CURRENT_TIMESTAMP())
ORDER BY duration_seconds DESC;