SELECTSELECT

SELECT

Come usare i Query Timeout in Snowflake

By Ian WhitestoneMar 18, 20233 min read

Questa pagina è disponibile anche in English, Deutsch, Español, Français, 日本語 e Português.

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.

SELECT query timeout

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.