Les query timeouts sont un outil essentiel pour les utilisateurs de Snowflake qui souhaitent maîtriser leurs coûts et éviter les pics de dépenses accidentels. Dans cet article, nous verrons pourquoi ils sont utiles et comment les configurer.
Qu'est-ce qu'un query timeout dans Snowflake ?
Les query timeouts sont un paramètre qui empêche les requêtes Snowflake de s'exécuter trop longtemps. Si une requête dépasse la durée définie, Snowflake l'annule automatiquement.

Pourquoi définir un timeout ?
Dans Snowflake, les requêtes s'exécutent sur des virtual warehouses, et Snowflake facture chaque seconde durant laquelle un warehouse est actif (ou resumed). Par exemple, si quelqu'un lance une requête peu efficace sur un volumineux jeu de données et qu'elle met 2 jours à s'exécuter sur un warehouse extra-large, cette seule requête coûtera près de 2 000 dollars au client.
En réduisant la valeur du query timeout, les clients de Snowflake peuvent maîtriser leurs coûts et éviter les frais inattendus liés à des requêtes interminables.
Quel est le query timeout par défaut dans Snowflake ?
Le query timeout par défaut dans Snowflake est de 2 jours (172 800 secondes) pour les sessions et les warehouses (source). Compte tenu de cette valeur par défaut très élevée, la plupart des clients Snowflake ont tout intérêt à raccourcir cette durée.
Comment configurer les query timeouts dans Snowflake
Les query timeouts peuvent être définis de plusieurs manières : au niveau du compte, par utilisateur, pour une session unique ou pour un warehouse donné. Toutes ces méthodes reposent sur le paramètre STATEMENT_TIMEOUT_IN_SECONDS.
Query timeout de session
Pour vérifier le query timeout actuel de la session en cours, exécutez la commande suivante :
1show parameters for session
Pour fixer le query timeout à 1 heure pour la session en cours, exécutez la commande suivante :
1alter session set statement_timeout_in_seconds = 3600
Query timeout par utilisateur
Pour consulter le query timeout d'un utilisateur donné (analytics_user), exécutez la commande suivante :
1show parameters for user analytics_user
Pour fixer le query timeout à 1 heure pour un utilisateur donné, exécutez la commande suivante :
1alter user analytics_user set statement_timeout_in_seconds = 3600
Timeout au niveau du compte
Pour consulter le query timeout actuel du compte, exécutez la commande suivante :
1show parameters for account
Il est probablement réglé sur la valeur par défaut de 2 jours (172 800). Pour le ramener à 1 jour, exécutez la commande suivante :
1alter account set statement_timeout_in_seconds = 86400
Query timeout de warehouse
Pour vérifier le query timeout actuel d'un warehouse existant, exécutez la commande ci-dessous. Dans cet exemple, le warehouse s'appelle COMPUTE.
1show parameters for warehouse compute
Pour fixer le query timeout à 1 heure sur ce warehouse, exécutez la commande suivante :
1alter warehouse compute set statement_timeout_in_seconds = 3600
Le timeout peut également être défini lors de la création d'un nouveau warehouse :
create warehouse compute
warehouse_size = 'XSMALL'
statement_timeout_in_seconds = 3600
;
Quel query timeout s'applique lorsque plusieurs sont définis ?
Lorsque plusieurs query timeouts coexistent, Snowflake applique le plus court. Par exemple, si une session a un timeout d'1 heure et un warehouse un timeout de 10 minutes, Snowflake annulera toute requête dépassant 10 minutes.
Comment configurer les task timeouts dans Snowflake
Les timeouts des tasks Snowflake se configurent via le paramètre USER_TASK_TIMEOUT_MS. Le timeout par défaut est d'1 heure (source). Attention : l'unité est ici la milliseconde, et non la seconde comme pour les query timeouts.
Comme pour les warehouses et les sessions, vous pouvez consulter le timeout actuel en exécutant show parameters for task my_task. Pour fixer le task timeout à 60 secondes, exécutez alter task my_task set user_task_timeout_ms = 60000.
Les requêtes et tasks annulées par les timeouts Snowflake sont-elles facturées ?
Oui. Snowflake facture chaque seconde durant laquelle un virtual warehouse est actif. Si une requête tourne pendant 4 heures sur un virtual warehouse avant d'être annulée par Snowflake, le client sera facturé pour ces 4 heures d'activité du warehouse.
Ian Whitestone·Co-fondateur et CEO de SELECT
Ian est le co-fondateur et CEO de SELECT, une plateforme SaaS de gestion et d'optimisation des coûts Snowflake. Avant de lancer SELECT, Ian a passé 6 ans à diriger des équipes full stack de data science et d'engineering chez Shopify et Capital One. Chez Shopify, il a piloté les chantiers d'optimisation du data warehouse et d'amélioration de l'observabilité des coûts.