Profilage d’entrepôt : Comprendre votre utilisation de Snowflake

Profilage d’entrepôt : Comprendre votre utilisation de Snowflake


Ceci est le premier d’une série de messages de suivi du message précédent de Kent Graziano, Utilisation du schéma d’informations de flocon de neige. Cette série approfondira le schéma d’information (dictionnaire de données de Snowflake) et vous montrera des moyens pratiques d’utiliser ces données pour mieux comprendre votre utilisation de Snowflake.

En tant qu’ingénieur de la réussite client, une grande partie de mon activité quotidienne consiste à dresser le profil de certains de nos clients les plus importants et à comprendre exactement comment le service est utilisé. Je mesure leur utilisation des crédits de calcul, la croissance du stockage et les performances des requêtes. Beaucoup de ces clients me demandent souvent comment ils peuvent implémenter eux-mêmes un profilage similaire pour leur compte Snowflake.

La réponse est d’utiliser le schéma d’information. En plus de fournir un ensemble de vues détaillées dans le magasin de métadonnées de Snowflake, le schéma d’information va encore plus loin et fournit plusieurs fonctions de table puissantes qui peuvent être appelées directement en SQL. Ces Les fonctions peuvent être utilisées pour renvoyer des informations historiques sur les requêtes exécutées, les données stockées dans les bases de données et les étapes, et l’utilisation de l’entrepôt virtuel (c’est-à-dire le calcul).

En plus de ces fonctions, je recommande également de tirer parti de la vue TABLE_STORAGE_METRICS récemment implémentée (également dans le schéma d’informations) pour approfondir encore votre analyse.

Dans cet article, je vais vous montrer comment tirer parti de ces fonctions faciles à utiliser pour recueillir des informations détaillées sur l’utilisation de vos entrepôts virtuels. Alors, commençons.

Profilage d’entrepôt

Pour profiler votre utilisation actuelle de l’entrepôt, utilisez le WAREHOUSE_LOAD_HISTORY et WAREHOUSE_METERING_HISTORY les fonctions. Une bonne façon de penser à la relation entre ces deux fonctions est que la première montre combien de travail a été effectué sur une période de temps (charger) et le second montre le coût pour faire le travail (mesure).

La syntaxe pour appeler ces fonctions est simple et peut être exécutée dans le Feuille de travail dans l’interface Web de Snowflake. Par exemple:

use warehouse mywarehouse;

select * from table(information_schema.warehouse_load_history(date_range_start=>dateadd('hour',-1,current_timestamp())));

select * from table(information_schema.warehouse_metering_history(dateadd('hour',-1,current_timestamp()),current_timestamp()));

Les requêtes ci-dessus affichent la charge de l’entrepôt et les crédits utilisés au cours de la dernière heure pour tous vos entrepôts. Assurez-vous de consulter le Remarques sur l’utilisation (dans la documentation) pour chaque fonction afin de comprendre toutes les exigences et règles. Par exemple, la fonction WAREHOUSE_LOAD_HISTORY renvoie des résultats à différents intervalles en fonction de la période que vous spécifiez :

  • Intervalles de 5 secondes lorsque le délai est inférieur à 7 heures.
  • Intervalles de 5 minutes lorsque le délai est supérieur à 7 heures.

Voici un exemple de sortie de la requête WAREHOUSE_LOAD_HISTORY sur SNOWHOUSE, un entrepôt que nous utilisons en interne :

Consultation de l'historique de chargement de l'entrepôt

Selon notre documentation :

  • AVG_RUNNING – Nombre moyen de requêtes exécutées.
  • AVG_QUEUE_LOAD – Nombre moyen de requêtes mises en file d’attente car l’entrepôt était surchargé.
  • AVG_QUEUE_PROVISION – Nombre moyen de requêtes mises en file d’attente car l’entrepôt était en cours de provisionnement.
  • AVG_BLOCKED – Nombre moyen de requêtes bloquées par un verrou de transaction.

Et voici un exemple de la sortie de la requête WAREHOUSE_METERING_HISTORY contre SNOWHOUSE :

Consultation de l'historique des compteurs d'entrepôt

Maintenant que nous connaissons la quantité de travail qui a été effectuée au cours de la période (via WAREHOUSE_LOAD_HISTORY) et le coût par période (via WAREHOUSE_METERING_HISTORY), nous pouvons effectuer un simple calcul du taux d’efficacité pour un entrepôt particulier. Cet exemple renvoie ces informations pour un entrepôt nommé XSMALL :

with cte as (
  select date_trunc('hour', start_time) as start_time, end_time, warehouse_name, credits_used
  from table(information_schema.warehouse_metering_history(dateadd('days',-1,current_date()),current_date()))
  where warehouse_name="XSMALL")
select date_trunc('hour', a.start_time) as start_time, avg(AVG_RUNNING), avg(credits_used), avg(AVG_RUNNING) / avg(credits_used) * 100 
from table(information_schema.warehouse_load_history(dateadd('days',-1,current_date()),current_date())) a
join cte b on a.start_time = date_trunc('hour', a.start_time)
where a.warehouse_name="XSMALL"
group by 1
order by 1;

Dans la requête ci-dessus, nous traitons la moyenne de AVG_RUNNING comme travail et la moyenne de CREDITS_USED comme coût et nous appliquons un ratio d’efficacité simple sur ces deux valeurs. N’hésitez pas à expérimenter comme bon vous semble.

Calcul d'un ratio d'efficacité

Parlons ensuite de l’utilisation spécifique de WAREHOUSE_LOAD_HISTORY dans notre exemple ci-dessus :

select date_trunc('hour', start_time), hour(start_time), avg(avg_running)
from table(information_schema.warehouse_load_history(date_range_start=>dateadd('day',-1,current_timestamp())))
group by date_trunc('hour', start_time), hour(start_time)
order by date_trunc('hour', start_time) asc;

Voici la sortie :

Calcul de la charge de travail de l'entrepôt au fil du temps

Dans ce cas, je demande bien une moyenne d’une moyenne. Je regroupe les valeurs par heures afin d’avoir un aperçu général de la charge de travail de mon entrepôt. Je peux voir que mon entrepôt fonctionne presque une journée complète. Cependant, si je vois des intervalles de temps dans cette sortie, je pourrais alors faire une enquête supplémentaire à ces moments et voir si l’entrepôt devrait fonctionner.

Une autre chose que vous pouvez voir dans la sortie de cette fonction est de savoir si ces intervalles de temps se répètent sur quelques jours. Si c’est le cas, je vous recommande de mettre l’entrepôt en veille lorsqu’il n’est pas utilisé (c’est-à-dire pour économiser de l’argent) ou d’activer AUTO_SUSPEND et AUTO_RESUME pour cet entrepôt.

L’interface Web de Snowflake a également une belle représentation visuelle de cette fonction (sous le Entrepôt languette):

Web UI - Chargement de l'entrepôt au fil du temps

Pour plus de détails sur ce tableau, consultez notre Documentation.

Que vous utilisiez le graphique visuel ou la requête manuelle, pour les quatre métriques disponibles, portez une attention particulière à AVG_RUNNING. Cela devrait vous donner une idée de la performance de chaque entrepôt. Si vous avez réparti votre charge de travail sur plusieurs entrepôts différents, cela devrait vous indiquer dans quelle mesure vos requêtes sont distribuées.

AVG_QUEUE_LOAD et AVG_BLOCKED sont également intéressants et devraient vous donner un bon aperçu de la taille de vos entrepôts. Gardez à l’esprit que la file d’attente n’est pas nécessairement une mauvaise chose et vous ne devez pas vous attendre à aucune file d’attente. L’idée est d’accepter un certain nombre de files d’attente par période de temps en fonction de vos besoins d’utilisation.

À l’aide de ces métriques, vous pouvez déterminer ce qu’il faut faire :

  • L’augmentation de la taille de l’entrepôt fournira plus de débit dans le traitement des requêtes et peut ainsi aider à réduire le temps d’attente.
  • L’augmentation du nombre de clusters (si vous utilisez un entrepôt multi-cluster) permettra une plus grande simultanéité, ce qui devrait également aider à réduire les files d’attente et les blocages.

Trouver un entrepôt sous-utilisé

Y a-t-il un entrepôt qui est sous-utilisé ? Par exemple, tout entrepôt de taille similaire partagé entre plusieurs utilisateurs pourrait potentiellement être consolidé en un seul entrepôt. Vous pouvez afficher ces informations en comparant vos scores AVG_RUNNING et AVG_QUEUE_LOAD dans vos entrepôts :

  • Si vous voyez un entrepôt avec un très faible nombre de requêtes en cours d’exécution, vous pouvez désactiver cet entrepôt et rediriger les requêtes vers un autre entrepôt moins utilisé.
  • Si un entrepôt exécute des requêtes et des files d’attente, il est peut-être temps de revoir votre flux de travail pour augmenter la taille de vos entrepôts.
  • Si vous avez créé votre propre application cliente pour s’interfacer avec Snowflake, l’examen de vos scripts client/code d’application devrait également révéler tout biais en faveur d’un entrepôt par rapport à un autre.

Mettre tous ensemble…

Les vues et les fonctions du schéma d’informations sont fournies pour vous aider à disséquer votre requête, votre entrepôt et votre utilisation de la base de données. La mise en œuvre et l’analyse réelles sont basées sur vos besoins spécifiques.

Pour en savoir plus sur ces fonctions, vous pouvez consulter notre documentation en ligne :

https://docs.snowflake.net/manuals/sql-reference/info-schema.html
https://docs.snowflake.net/manuals/sql-reference/functions/warehouse_load_history.html
https://docs.snowflake.net/manuals/sql-reference/functions/warehouse_metering_history.html

Recherchez la partie 2 de cette série dans les semaines à venir où je vous montrerai comment analyser votre utilisation du stockage.

tuntjeje then, n’hésitez pas à nous contacter à [email protected]. Nous serions ravis de vous aider dans votre voyage vers le cloud. Et gardez un œil sur ce blog ou suivez-nous sur Twitter (@flocondeneige) pour suivre toutes les nouvelles et les événements ici à Snowflake Computing.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.