Query timeouts são essenciais para quem usa Snowflake e quer controlar custos e evitar picos acidentais de gastos. Neste post, vamos mostrar por que eles são úteis e como configurá-los.
O que são query timeouts no Snowflake?
Query timeouts são uma configuração que impede que consultas no Snowflake fiquem rodando por tempo demais. Se uma consulta ultrapassar o tempo definido, ela é cancelada automaticamente pelo Snowflake.

Por que usar um timeout?
No Snowflake, as consultas rodam em virtual warehouses, e o Snowflake cobra por cada segundo em que um warehouse está ativo (resumed). Por exemplo, se alguém rodar uma consulta ineficiente em um grande conjunto de dados e ela levar 2 dias para terminar em um warehouse extra-large, essa única consulta vai custar quase US$ 2.000 ao cliente.
Ao reduzir o valor do query timeout, os clientes do Snowflake conseguem controlar os custos e evitar cobranças inesperadas por consultas demoradas.
Qual é o query timeout padrão no Snowflake?
O query timeout padrão no Snowflake é de 2 dias (172.800 segundos) para sessões e warehouses (fonte). Como esse padrão é bem alto, vale a pena que a maioria dos clientes do Snowflake reveja esse tempo e use um valor menor.
Como configurar query timeouts no Snowflake
Os query timeouts podem ser definidos de algumas formas: para toda a conta, por usuário, para uma sessão específica ou para um warehouse. Todos os métodos usam o parâmetro STATEMENT_TIMEOUT_IN_SECONDS.
Query Timeout por sessão
Para verificar o query timeout atual da sessão, execute o comando abaixo:
1show parameters for session
Para definir o query timeout em 1 hora na sessão atual, execute:
1alter session set statement_timeout_in_seconds = 3600
Query Timeout por usuário
Para ver o query timeout atual de um usuário específico (analytics_user), execute:
1show parameters for user analytics_user
Para definir o query timeout em 1 hora para um usuário específico, execute:
1alter user analytics_user set statement_timeout_in_seconds = 3600
Timeout para toda a conta
Para ver o query timeout atual da conta, execute:
1show parameters for account
Provavelmente vai estar no padrão de 2 dias (172.800). Para reduzir para 1 dia, execute:
1alter account set statement_timeout_in_seconds = 86400
Query Timeout por warehouse
Para verificar o query timeout atual de um warehouse existente, execute o comando abaixo. Neste exemplo, o warehouse se chama COMPUTE.
1show parameters for warehouse compute
Para alterar o query timeout do warehouse para 1 hora, execute:
1alter warehouse compute set statement_timeout_in_seconds = 3600
O timeout também pode ser configurado na criação de um novo warehouse:
create warehouse compute
warehouse_size = 'XSMALL'
statement_timeout_in_seconds = 3600
;
Qual query timeout vale quando há vários configurados?
Quando há várias configurações de query timeout ativas ao mesmo tempo, o Snowflake aplica a menor delas. Por exemplo, se uma sessão tem timeout de 1 hora e um warehouse tem timeout de 10 minutos, o Snowflake vai cancelar qualquer consulta que passe de 10 minutos.
Como configurar timeouts de tasks no Snowflake
Os timeouts das tasks do Snowflake são configurados pelo parâmetro USER_TASK_TIMEOUT_MS. O timeout padrão é de 1 hora (fonte). Atenção: a unidade aqui é milissegundos, e não segundos como nos query timeouts.
Assim como nos warehouses e sessões, dá para verificar o timeout atual rodando show parameters for task my_task. Para alterar o timeout da task para 60 segundos, execute alter task my_task set user_task_timeout_ms = 60000.
Consultas e tasks canceladas pelos timeouts do Snowflake são cobradas?
Sim. O Snowflake cobra dos clientes por cada segundo em que um virtual warehouse fica ativo. Se uma consulta rodar em um virtual warehouse por 4 horas até ser cancelada pelo Snowflake, o cliente vai ser cobrado pelas 4 horas em que o warehouse esteve ativo.
Ian Whitestone·Co-founder & CEO da SELECT
Ian é Co-founder & CEO da SELECT, uma plataforma SaaS de gestão e otimização de custos do Snowflake. Antes de fundar a SELECT, Ian passou 6 anos liderando times de full stack data science & engineering na Shopify e na Capital One. Na Shopify, ele liderou as iniciativas de otimização do data warehouse e de aumento da observabilidade de custos.