SELECTSELECT

SELECT

Como usar Query Timeouts no Snowflake

By Ian WhitestoneMar 18, 20233 min read

Esta página também está disponível em English, Deutsch, Español, Français, Italiano e 日本語.

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.

SELECT query timeout

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.