I query timeout sono uno strumento fondamentale per chi usa Snowflake e vuole tenere sotto controllo i costi ed evitare picchi di spesa accidentali. In questo articolo vediamo perché sono utili e come configurarli.
Cosa sono i query timeout di Snowflake?
Il query timeout è un'impostazione che impedisce alle query di Snowflake di restare in esecuzione troppo a lungo. Se una query supera il tempo definito dal timeout, Snowflake la annulla automaticamente.

Perché impostare un timeout?
In Snowflake le query vengono eseguite sui virtual warehouse e Snowflake fattura ogni secondo in cui un warehouse è attivo ("resumed"). Ad esempio, se qualcuno lancia una query inefficiente su un dataset di grandi dimensioni e questa impiega 2 giorni per completarsi su un warehouse extra-large, quella singola query costerà al cliente quasi 2.000 dollari.
Riducendo il valore del query timeout, i clienti Snowflake possono tenere sotto controllo i costi ed evitare addebiti imprevisti dovuti a query con tempi di esecuzione lunghi.
Qual è il query timeout predefinito in Snowflake?
Il query timeout predefinito in Snowflake è di 2 giorni (172.800 secondi), sia per le sessioni che per i warehouse ( fonte). Vista la soglia così elevata, la maggior parte dei clienti Snowflake dovrebbe valutare di abbassarlo a valori più contenuti.
Come configurare i query timeout in Snowflake
I query timeout possono essere impostati in diversi modi: a livello di account, per singolo utente, per una singola sessione o per un determinato warehouse. Tutti i metodi utilizzano il parametro STATEMENT_TIMEOUT_IN_SECONDS.
Query timeout di sessione
Per verificare il query timeout impostato sulla sessione corrente, eseguire il comando seguente:
1show parameters for session
Per impostare a 1 ora il query timeout della sessione corrente, eseguire il comando seguente:
1alter session set statement_timeout_in_seconds = 3600
Query timeout per utente
Per visualizzare il query timeout impostato per un determinato utente (analytics_user), eseguire il comando seguente:
1show parameters for user analytics_user
Per impostare a 1 ora il query timeout di un determinato utente, eseguire il comando seguente:
1alter user analytics_user set statement_timeout_in_seconds = 3600
Timeout a livello di account
Per visualizzare il query timeout impostato sull'account, eseguire il comando seguente:
1show parameters for account
Con tutta probabilità risulterà impostato sul valore predefinito di 2 giorni (172.800). Per portarlo a 1 giorno, eseguire il comando seguente:
1alter account set statement_timeout_in_seconds = 86400
Query timeout di warehouse
Per verificare il query timeout impostato su un warehouse esistente, eseguire il comando seguente. In questo esempio il warehouse si chiama COMPUTE.
1show parameters for warehouse compute
Per portare a 1 ora il query timeout del warehouse, eseguire il comando seguente:
1alter warehouse compute set statement_timeout_in_seconds = 3600
Il timeout può essere configurato anche al momento della creazione di un nuovo warehouse:
create warehouse compute
warehouse_size = 'XSMALL'
statement_timeout_in_seconds = 3600
;
Quale query timeout viene applicato quando ne sono impostati più di uno?
Quando sono presenti più impostazioni di query timeout, Snowflake applica quella con il valore più basso. Ad esempio, se una sessione ha un query timeout di 1 ora e un warehouse di 10 minuti, Snowflake annullerà qualsiasi query che resti in esecuzione per più di 10 minuti.
Come configurare i timeout dei task in Snowflake
I timeout dei task di Snowflake si configurano tramite il parametro USER_TASK_TIMEOUT_MS. Il timeout predefinito è di 1 ora ( fonte). Attenzione: l'unità di misura è il millisecondo, mentre per i query timeout è il secondo.
Come per i warehouse e le sessioni, è possibile verificare l'impostazione corrente eseguendo show parameters for task my_task. Per portare il timeout del task a 60 secondi, eseguire alter task my_task set user_task_timeout_ms = 60000.
Le query e i task annullati dai timeout di Snowflake vengono comunque fatturati?
Sì. Snowflake fattura ai clienti ogni secondo in cui un virtual warehouse è attivo. Se una query resta in esecuzione su un virtual warehouse per 4 ore prima di essere annullata da Snowflake, al cliente verranno comunque addebitate le 4 ore di attività del warehouse.
Ian Whitestone·Co-founder & CEO di SELECT
Ian è Co-founder e CEO di SELECT, piattaforma SaaS per la gestione e l'ottimizzazione dei costi di Snowflake. Prima di fondare SELECT, ha guidato per 6 anni team full stack di data science ed engineering in Shopify e Capital One. In Shopify si è occupato dell'ottimizzazione del data warehouse e del miglioramento dell'osservabilità dei costi.