Otimização de custo

Este tópico discute maneiras de otimizar o Snowflake para reduzir custos e maximizar seus gastos.

Otimização dos serviços de nuvem para custos

Se você achar que seu uso de serviços de nuvem é maior do que o esperado, verifique se o uso do Snowflake segue algum dos padrões a seguir. Cada padrão inclui uma recomendação que pode ajudar você a reduzir custos associados aos serviços de nuvem.

Padrão: consultas bloqueadas devido a bloqueios de transação

Os comandos de atualização e mesclagem colocam um bloqueio de transação em uma tabela, o que impede que outros comandos sejam executados nessa tabela até que o bloqueio seja liberado. As consultas consomem créditos de serviços de nuvem enquanto aguardam a liberação de um bloqueio. Quanto mais tempo as consultas permanecem na camada de serviços de nuvem aguardando o bloqueio, mais créditos elas consomem.

Recomendação: os bloqueios de transação geralmente ocorrem quando os usuários executam comandos simultâneos de atualização/mesclagem em uma única tabela, especialmente quando cada comando atualiza apenas algumas linhas. Você pode minimizar esses bloqueios usando um comando em lote em vez de atualizações únicas. Nesta estratégia, você faz o seguinte:

  1. Use uma instrução em lote INSERT para carregar novos dados em uma tabela temporária. Evite usar uma inserção de linha única. Mesmo as chamadas de API que carregam novos dados continuamente devem ser projetadas de forma que enviem inserções em lote em vez de inserções de linha única.

  2. Use a tabela temporária para atualizar/mesclar a tabela de destino.

Se a origem enviar novos dados continuamente ao longo do dia, considere usar uma tarefa para atualizar a tabela de destino periodicamente.

Padrão: comandos de cópia com baixa seletividade

A execução de comandos de cópia envolve listar arquivos do Amazon Simple Storage Service (S3). Como a listagem de arquivos usa apenas computação de serviços de nuvem, a execução de comandos de cópia com baixa seletividade pode resultar em alto uso de serviços de nuvem.

Recomendação: considere alterar a estrutura do seu bucket S3 para incluir algum tipo de prefixo de data, para listar apenas os arquivos de destino necessários.

Padrão: operações DDL de alta frequência e clonagem

As operações de linguagem de definição de dados (DDL), especialmente a clonagem, são operações inteiramente de metadados, o que significa que usam apenas computação de serviços de nuvem. A criação ou eliminação frequente de grandes esquemas ou tabelas, ou a clonagem de bancos de dados para backup, podem resultar no uso significativo de serviços de nuvem.

Recomendação: a clonagem usa apenas uma fração dos recursos necessários para fazer cópias profundas, portanto você deve continuar a clonar. Revise seus padrões de clonagem para garantir que eles sejam tão granulares quanto possível e não sejam executados com muita frequência. Por exemplo, talvez você queira clonar apenas tabelas individuais em vez de um esquema inteiro.

Padrão: consultas simples e de alta frequência

O consumo de serviços de nuvem por uma única consulta simples é insignificante, mas a execução de consultas como SELECT 1, SELECT sequence1.NEXTVAL ou SELECT CURRENT_SESSION() com uma frequência extremamente alta (dezenas de milhares por dia) pode resultar em um uso significativo de serviços de nuvem.

Recomendação: revise a frequência de consulta e determine se ela está definida adequadamente para seu caso de uso. Se você observar uma alta frequência de consultas SELECT CURRENT_SESSION() originadas de ferramentas de parceiros que usam o driver JDBC, confirme se o parceiro atualizou o código para usar o método getSessionId() na interface SnowflakeConnection. Isso aproveita o cache e reduz o uso de serviços de nuvem.

Padrão: consultas INFORMATION_SCHEMA de alta frequência

As consultas em Snowflake Information Schema consomem apenas recursos de serviços de nuvem. O consumo de serviços de nuvem por uma única consulta em exibições INFORMATION_SCHEMA pode ser insignificante, mas a execução dessas consultas com frequência extremamente alta (dezenas de milhares por dia) pode resultar em uso significativo de serviços de nuvem.

Recomendação: revise a frequência de consulta e determine se ela está definida adequadamente para seu caso de uso. Como alternativa, você pode consultar uma exibição no esquema ACCOUNT_USAGE em vez de uma exibição INFORMATION_SCHEMA. A consulta do esquema ACCOUNT_USAGE usa um warehouse virtual em vez de serviços de nuvem.

Padrão: comandos SHOW de alta frequência (por aplicativos de dados e ferramentas de terceiros)

Os comandos SHOW são operações inteiramente de metadados, o que significa que consomem apenas recursos de serviços de nuvem. Esse padrão normalmente ocorre quando você cria um aplicativo baseado no Snowflake que executa comandos SHOW em alta frequência. Esses comandos também podem ser iniciados por ferramentas de terceiros.

Recomendação: revise a frequência de consulta e determine se ela está definida adequadamente para seu caso de uso. No caso de ferramentas de parceiros, entre em contato com seu parceiro para saber se ele tem planos de ajustar seu uso.

Padrão: inserções de linha única e esquemas fragmentados (por aplicativos de dados)

Snowflake não é um sistema OLTP, portanto, inserções de linha única não são ideais e podem consumir recursos significativos de serviços de nuvem.

Criar um aplicativo de dados que defina um esquema por cliente pode resultar em diversas cargas de dados em um determinado período, o que pode resultar em alto consumo de serviços de nuvem.

Esse padrão também resulta em muito mais metadados que o Snowflake precisa manter, e as operações de metadados consomem recursos de serviços de nuvem. Cada operação de metadados consome recursos mínimos individualmente, mas o consumo pode ser significativo em conjunto.

Recomendação: em geral, faça carregamentos em lote ou em massa em vez de inserções de linha única.

Usar um esquema compartilhado é significativamente mais eficiente, o que economiza custos. Provavelmente você desejará agrupar todas as tabelas em customer_ID e usar exibições seguras.

Padrão: consultas SQL complexas

As consultas podem consumir computação significativa dos serviços de nuvem se incluírem muitas junções/produtos cartesianos, usarem o operador IN com listas grandes ou forem consultas muito grandes. Todos esses tipos de consultas têm tempos de compilação elevados.

Recomendação: revise suas dúvidas para confirmar se elas estão fazendo o que você pretende que façam. Snowflake oferece suporte a essas consultas e cobrará apenas pelos recursos consumidos.