Controle de custos

Este tópico discute os controles que você pode usar para limitar o quanto é gasto na utilização de warehouse virtual. Esses controles ajudam a garantir que o custo real do uso de warehouses virtuais não exceda o custo esperado.

Estes controles não se aplicam a serviços de nuvem e recursos sem servidor.

Neste tópico:

Controle de acesso aos warehouses

Defina cuidadosamente quem pode trabalhar com warehouses e o que eles podem fazer com esses warehouses ajuda a controlar os custos, limitando o uso de recursos de computação aos warehouses conhecidos que têm configurações rentáveis. O controle de acesso granular do Snowflake permite que você conceda os seguintes privilégios para warehouses:

  • CREATE WAREHOUSE — Privilégio global (ou seja, concedido na conta) que restringe quais funções podem criar um novo warehouse, permitindo forçar os indivíduos a usar os warehouses existentes que têm controles de custos em vigor.

  • MODIFY — Privilégio em um warehouse específico que permite alterar as configurações que afetam o custo, incluindo o redimensionamento de um warehouse e a desativação da configuração de suspensão automática. Geralmente, os usuários aumentam o tamanho de um warehouse para uma determinada carga de trabalho e depois esquecem de mudá-lo de volta ao seu tamanho original, o que pode ter um efeito significativo no custo.

  • USAGE — Privilégio em um warehouse específico que permite ativar o warehouse para fornecer recursos de computação para consultas e outras ações SQL. A atribuição cuidadosa deste privilégio garante que os usuários só possam utilizar warehouses com o tamanho e a configuração adequados para suas cargas de trabalho.

Centralizar a responsabilidade de criar e escalar warehouses para apenas alguns membros de sua equipe é considerado uma prática recomendada. Você pode criar uma função dedicada com permissões para criar e modificar todos os warehouses, e então conceder essa função a um número limitado de usuários. Isto permite que você controle suas políticas de warehouse e evite excessos acidentais de custos resultantes da criação ou do aumento inesperado dos warehouses.

Dica

Se você quiser a capacidade de escalar um warehouse para lidar com cargas de trabalho mais exigentes, mas não quer dar aos usuários a capacidade de aumentar o tamanho de um warehouse porque eles podem esquecer de redimensioná-lo mais tarde, considere o uso de um warehouse multicluster. Um warehouse multicluster escala automaticamente à medida que as cargas de trabalho flutuam.

Para obter uma lista de todos os privilégios que podem ser definidos para um warehouse, consulte Privilégios de warehouse virtual.

Escolha do tamanho de um warehouse

O tamanho de um warehouse determina o número máximo de créditos que podem ser gastos em uma hora. Por exemplo, um warehouse pequeno não pode consumir mais do que 2 créditos por hora. Para obter uma lista completa dos tamanhos de warehouse junto com o número máximo de créditos que consomem, consulte Visão geral de warehouses.

Uma prática recomendada para o controle de custos é usar diferentes warehouses para diferentes cargas de trabalho, o que lhe permite escolher um tamanho apropriado para cada carga de trabalho. Se você não tem certeza qual é o melhor tamanho para o warehouse, comece com um tamanho menor e aumente-o lentamente com base no desempenho da carga de trabalho e seu SLA.

Para obter mais informações sobre como escolher o warehouse certo para uma carga de trabalho, consulte Managing Snowflake Compute Resources (post no blog Snowflake).

Limitação dos tempos de consulta

As consultas paradas consomem créditos excessivos, pois são mais longas do que o esperado. Para evitar o custo em excesso associado a uma consulta em execução, você pode definir o parâmetro STATEMENT_TIMEOUT_IN_SECONDS para definir a quantidade máxima de tempo que uma instrução SQL pode ser executada antes de ser cancelada.

O parâmetro STATEMENT_TIMEOUT_IN_SECONDS pode ser definido para uma conta inteira, um usuário, uma sessão ou um warehouse específico para que você possa definir cuidadosamente os limites de tempo que correspondem aos tempos de execução esperados para várias cargas de trabalho. Este parâmetro é definido no nível de conta por padrão. Quando o parâmetro é definido para um warehouse, além da sessão, é aplicado o menor valor diferente de zero.

Use os seguintes comandos para visualizar os limites de tempo atuais de consulta:

SHOW PARAMETERS LIKE 'STATEMENT_TIMEOUT_IN_SECONDS' IN ACCOUNT;
SHOW PARAMETERS LIKE 'STATEMENT_TIMEOUT_IN_SECONDS' IN USER <username>;
SHOW PARAMETERS LIKE 'STATEMENT_TIMEOUT_IN_SECONDS' IN SESSION;
SHOW PARAMETERS LIKE 'STATEMENT_TIMEOUT_IN_SECONDS' IN WAREHOUSE <warehouse_name>;
Copy

Se você precisar ajustar os limites de tempo, use um dos seguintes comandos:

ALTER ACCOUNT SET STATEMENT_TIMEOUT_IN_SECONDS = <number_of_seconds>;
ALTER USER <username> SET STATEMENT_TIMEOUT_IN_SECONDS = <number_of_seconds>;
ALTER SESSION SET STATEMENT_TIMEOUT_IN_SECONDS = <number_of_seconds>;
ALTER WAREHOUSE <warehouse_name> SET STATEMENT_TIMEOUT_IN_SECONDS = <number_of_seconds>;
Copy

Limitação dos tempos de fila da instrução

As instruções SQL que estão em fila de espera para utilizar um warehouse não consomem créditos. No entanto, se uma consulta permanecer na fila por muito tempo, ela pode não ser mais relevante no momento em que é executada. A execução de uma consulta que não é mais relevante consome créditos, assim você pode implementar um controle de custos, definindo um tempo máximo que uma instrução SQL pode ser colocada em fila antes de ser cancelada.

O parâmetro que controla a quantidade de tempo que uma instrução SQL permanece na fila é STATEMENT_QUEUED_TIMEOUT_IN_SECONDS. Este parâmetro pode ser definido para uma conta inteira, um usuário, uma sessão ou um warehouse específico. Este parâmetro é definido no nível de conta por padrão. Quando o parâmetro é definido para um warehouse, além da sessão, é aplicado o menor valor diferente de zero.

Use os seguintes comandos para visualizar os limites de tempo atuais de fila:

SHOW PARAMETERS LIKE 'STATEMENT_QUEUED_TIMEOUT_IN_SECONDS' IN ACCOUNT;
SHOW PARAMETERS LIKE 'STATEMENT_QUEUED_TIMEOUT_IN_SECONDS' IN USER <username>;
SHOW PARAMETERS LIKE 'STATEMENT_QUEUED_TIMEOUT_IN_SECONDS' IN SESSION;
SHOW PARAMETERS LIKE 'STATEMENT_QUEUED_TIMEOUT_IN_SECONDS' IN WAREHOUSE <warehouse_name>;
Copy

Se você precisar ajustar os limites de tempo, use um dos seguintes comandos:

ALTER ACCOUNT SET STATEMENT_QUEUED_TIMEOUT_IN_SECONDS = <number_of_seconds>;
ALTER USER <username> SET STATEMENT_QUEUED_TIMEOUT_IN_SECONDS = <number_of_seconds>;
ALTER SESSION SET STATEMENT_QUEUED_TIMEOUT_IN_SECONDS = <number_of_seconds>;
ALTER WAREHOUSE <warehouse_name> SET STATEMENT_QUEUED_TIMEOUT_IN_SECONDS = <number_of_seconds>;
Copy

Uso da suspensão automática

Por padrão, todos os warehouses têm a configuração de suspensão automática ativada, o que significa que um warehouse se desliga automaticamente quando está inativo por um período definido. Um warehouse suspenso não consome créditos, portanto, o warehouse só incorre em custos quando está processando uma carga de trabalho.

Restringir os usuários de desativar a configuração de suspensão automática ajuda a evitar que um warehouse não utilizado desperdice créditos. Você pode usar controle de acesso para permitir que alguém utilize um warehouse, mas também impedir que ele modifique sua configuração de suspensão automática.

Consulta: Encontrar warehouses sem suspensão automática

Utilize a seguinte consulta para verificar periodicamente se a configuração de suspensão automática foi desativada para qualquer warehouse.

SHOW WAREHOUSES
;

SELECT "name" AS WAREHOUSE_NAME
    ,"size" AS WAREHOUSE_SIZE
FROM TABLE(RESULT_SCAN(LAST_QUERY_ID()))
WHERE IFNULL("auto_suspend",0) = 0;
Copy

Para permitir a suspensão automática para os warehouses que a têm desligada, abra Snowsight e navegue até Admin » Warehouses. Você também pode usar o parâmetro AUTO_SUSPEND do comando ALTER WAREHOUSE.

Uso da retomada automática com suspensão automática

Em geral, todo warehouse com suspensão automática habilitada também deve ter a retomada automática habilitada. A combinação destas duas configurações para e inicia um warehouse automaticamente à medida que a carga de trabalho do warehouse flutua.

Consulta: Encontrar warehouses sem retomada automática

A consulta a seguir lista os warehouses que não têm a retomada automática habilitada, deixando você saber quais precisam ser modificados.

SHOW WAREHOUSES
;

SELECT "name" AS WAREHOUSE_NAME
    ,"size" AS WAREHOUSE_SIZE
FROM TABLE(RESULT_SCAN(LAST_QUERY_ID()))
WHERE "auto_resume" = 'false';
Copy

Para permitir a retomada automática para os warehouses que a têm desligada, abra Snowsight e navegue até Admin » Warehouses. Você também pode usar o parâmetro AUTO_RESUME do comando ALTER WAREHOUSE.

Imposição dos limites de gasto

Monitores de recursos permitem estabelecer limites de créditos consumidos por um warehouse durante um intervalo de hora ou data específicos. Isto pode ajudar a evitar que os warehouses consumam involuntariamente mais créditos do que o normalmente esperado.

Às vezes um monitor de recursos simplesmente notifica um administrador quando um limite de crédito é atingido, mas você também pode impor um limite configurando um monitor de recursos para suspender um warehouse assim que o limite for atingido. Há duas opções ao impor um limite: suspender o warehouse quando as instruções pendentes são executadas ou suspender imediatamente sem esperar que as instruções sejam concluídas.

Como um único monitor de recursos pode ser configurado para vários warehouses ou uma conta inteira, você pode efetivamente suspender vários warehouses quando um limite global de gastos for atingido. Um warehouse pode ser atribuído a seu próprio monitor de recursos e a um monitor de recursos específico da conta ao mesmo tempo; o warehouse é suspenso quando qualquer um dos limites de crédito é atingido.

Para obter mais detalhes sobre a suspensão de warehouses quando os limites de gastos são atingidos, consulte Como trabalhar com monitores de recursos.

Consulta: Encontrar warehouses sem monitores de recursos

A consulta seguinte lista os warehouses que não foram atribuídos a um monitor de recursos específico do warehouse, o que os torna vulneráveis a custos desenfreados. Observe que a consulta não verifica se há monitores de recursos em nível de conta; os warehouses da lista que pertencem a uma conta que tem um monitor de recursos em nível de conta ainda estão sujeitos a limites de crédito.

SELECT "name" AS WAREHOUSE_NAME
      ,"size" AS WAREHOUSE_SIZE
FROM TABLE(RESULT_SCAN(LAST_QUERY_ID()))
WHERE "resource_monitor" = 'null'
;
Copy

Nota

A camada de serviços de nuvem da arquitetura Snowflake ainda pode ter um pequeno custo se as consultas forem feitas em um warehouse que foi suspenso por um monitor de recursos.