Computação adaptativa

A computação adaptativa é um serviço de computação focado em fornecer alto desempenho com operações sem esforço. Ela substitui o mecanismo de computação fixo por um mecanismo que reconhece a carga de trabalho e se adapta automaticamente às suas consultas. O sistema decide como alocar recursos para obter o melhor desempenho, eliminando a necessidade de ajustes na infraestrutura.

Ao dimensionar recursos automaticamente e rotear consultas de forma inteligente, a computação adaptativa elimina a complexidade operacional associada ao gerenciamento tradicional de warehouses: dimensionamento manual de clusters, atualizações que causam interrupções e ajustes de desempenho manuais. Ela também incorpora os mais recentes aprimoramentos de hardware e desempenho, permitindo que os warehouses adaptativos executem significativamente mais consultas a um custo semelhante ao de Gen2.

Você acessa a computação adaptativa por meio de warehouses adaptativos. Com um warehouse adaptativo, você não precisa mais gerenciar:

  • Tamanho do warehouse (XSMALL, SMALL, MEDIUM, etc.).

  • Configurações de warehouse multicluster.

  • Configurações do Query Acceleration Service.

  • Semântica de suspensão e retomada.

O Snowflake cuida de tudo isso automaticamente, para que sua equipe possa se concentrar em trabalhar com os dados em vez de gerenciar a infraestrutura por trás deles.

Todos os trabalhos em todos os warehouses adaptativos de uma conta são encaminhados para um pool compartilhado de recursos computacionais. Esse pool é dedicado à sua conta: ele não é compartilhado com outras contas da sua organização e não é utilizado por outros tipos de warehouse, como o padrão, o interativo ou o otimizado para o Snowpark. Você ainda pode ter vários warehouses adaptativos por conta para agrupar workloads com características de desempenho e custo semelhantes, relatórios e governança.

Os warehouses adaptativos usam um modelo de cobrança baseado em consultas, em que o custo de cada consulta depende de fatores como a quantidade de recursos computacionais e de software que ela utiliza. Você ainda pode analisar os custos no nível do warehouse, pois todas as consultas executadas em um warehouse adaptativo somam-se ao custo total desse warehouse. A visibilidade de custos no nível da consulta não está disponível durante a versão preliminar pública, mas está planejada para disponibilidade geral.

As mesmas ferramentas de gerenciamento de custos estão disponíveis:

Você pode criar novos warehouses adaptativos ou converter warehouses padrão existentes em adaptativos sem tempo de inatividade. A conversão de warehouses existentes permite que você mantenha suas estruturas de chargeback e showback existentes e a segregação de carga de trabalho (análise versus ETL, warehouses baseados em equipe e assim por diante). Por exemplo, a equipe financeira pode usar um warehouse adaptativo e a equipe de engenharia pode usar outro.

Limitações

Os warehouses adaptativos exigem a Enterprise Edition (ou superior).

Durante a versão preliminar pública, os warehouses adaptativos estão disponíveis nas seguintes regiões: US West 2 (Oregon), EU West 1 (Ireland) e AP Northeast 1 (Tokyo).

As seguintes conversões ainda não são compatíveis:

  • Conversão de ou para um warehouse X5Large ou X6Large.

  • Conversão de ou para um warehouse otimizado para Snowpark ou interativo.

Gerenciando desempenho e taxa de transferência

Os warehouses adaptativos expõem duas propriedades principais para controlar o desempenho e a taxa de transferência:

  • MAX_QUERY_PERFORMANCE_LEVEL

  • QUERY_THROUGHPUT_MULTIPLIER

MAX_QUERY_PERFORMANCE_LEVEL

MAX_QUERY_PERFORMANCE_LEVEL expressa o limite superior de desempenho para qualquer consulta individual. Ele é definido no nível do warehouse e serve como mecanismo para instruir o sistema a «acelerar» ou «desacelerar» a execução da consulta.

A propriedade é expressa em unidades de tamanhos de amostras (XSMALL a X4LARGE). Cada tamanho transmite um nível de desempenho semelhante ou melhor do que o tamanho de warehouse clássico correspondente.

Tipo:

{ XSMALL | SMALL | MEDIUM | LARGE | XLARGE | XXLARGE | XXXLARGE | X4LARGE }

Padrão:

XLARGE

Semântica:

  • Valores maiores fornecem mais capacidade computacional por instrução, melhorando a latência para consultas grandes e complexas, e aumentam o gasto instantâneo potencial para uma única instrução.

  • Valores menores restringem o gasto por instrução, mas podem deixar consultas grandes mais lentas, ao mesmo tempo que deixam mais capacidade para simultaneidade.

  • Esse valor não é mapeado para uma configuração de computação subjacente específica. Ele expressa apenas um nível de desempenho: O Snowflake determina os recursos reais necessários para cada consulta.

Comportamento:

A computação adaptativa determina a computação ideal necessária para uma consulta com base no plano de consulta. Se o serviço determinar que as necessidades de computação para um desempenho ideal são maiores que MAX_QUERY_PERFORMANCE_LEVEL, o Snowflake vai limitá-las a MAX_QUERY_PERFORMANCE_LEVEL. Para consultas menores, o Snowflake escolhe a computação para um desempenho ideal abaixo de MAX_QUERY_PERFORMANCE_LEVEL, proporcional às necessidades da consulta.

Recomendação:

Defina MAX_QUERY_PERFORMANCE_LEVEL como o nível de desempenho de consulta mais alto que você considera aceitável para suas consultas maiores. Use orçamentos e monitores de recursos para controlar o gasto total ao longo do tempo.

QUERY_THROUGHPUT_MULTIPLIER

QUERY_THROUGHPUT_MULTIPLIER expressa o multiplicador utilizado para calcular a taxa de transferência máxima em qualquer momento. Em vez de especificar uma taxa de transferência máxima absoluta, você especifica um fator de escala de número inteiro acima do mínimo computado pelo sistema.

Para executar instruções N em paralelo no MAX_QUERY_PERFORMANCE_LEVEL, defina o multiplicador como N. Como MAX_QUERY_PERFORMANCE_LEVEL representa o limite superior, essa configuração normalmente é compatível com mais de N consultas executadas em paralelo, pois muitas consultas precisam de menos do que o máximo.

Tipo:

Número inteiro não negativo

Padrão:

2

Definir esse valor como 0 significa taxa de transferência ilimitada: o warehouse pode usar toda a capacidade de burst disponível, sem limite.

Semântica:

Quando definido com um valor positivo, a taxa de transferência máxima é calculada como:

MAX_THROUGHPUT = QUERY_THROUGHPUT_MULTIPLIER * MINIMUM

Em que MINIMUM é uma capacidade base calculada pelo sistema para o MAX_QUERY_PERFORMANCE_LEVEL definido no warehouse.

  • Atua como um fator de escala nessa capacidade base computada pelo sistema.

  • Valores mais altos aumentam a taxa de transferência máxima (mais trabalho simultâneo) e reduzem o enfileiramento, ao custo de um gasto instantâneo potencialmente maior.

  • Valores mais baixos restringem a taxa de transferência de burst e reduzem o risco de picos repentinos de gastos, mas podem levar a enfileiramentos.

Comportamento:

O Snowflake calcula uma taxa de capacidade base interna para o warehouse com base em MAX_QUERY_PERFORMANCE_LEVEL, histórico de migração (tamanho clássico, número máximo de clusters, fator de escala de QAS) e ​​outros parâmetros de ajuste do sistema.

QUERY_THROUGHPUT_MULTIPLIER multiplica pela capacidade base para determinar o número total de consultas que podem ser executadas simultaneamente. Quando o sistema está abaixo dessa meta, ele permite a execução da consulta. Quando atinge a meta, ele enfileira a consulta.

Recomendação:

Se você observar um tempo de enfileiramento de carga persistente e desejar maior taxa de transferência, aumente QUERY_THROUGHPUT_MULTIPLIER. Se você estiver mais preocupado em limitar os gastos instantâneos, reduza QUERY_THROUGHPUT_MULTIPLIER e confie em orçamentos e monitores de recursos para controles absolutos de custos.

Criar um warehouse adaptativo

Você pode criar um warehouse adaptativo usando o Snowsight, o SQL ou o Cortex Code.

Para criar um warehouse adaptativo usando o Snowsight:

  1. Faça login no Snowsight.

  2. No menu de navegação, selecione Compute » Warehouses.

  3. Selecione +Warehouse.

  4. Na lista suspensa Type, selecione Adaptive.

  5. Como opção, selecione Advanced e configure:

    • Maximum query performance level (padrão: XLarge)

    • Query throughput multiplier (padrão: 2)

O warehouse é criado e pode ser utilizado normalmente.

Converter um warehouse padrão em um warehouse adaptativo

Você pode converter um warehouse padrão em adaptativo usando o Snowsight, o SQL ou o Código Cortex.

Nota

A conversão de um warehouse para ou de um warehouse adaptativo é uma operação online, o que significa que não envolve tempo de inatividade. Essa conversão não deixa o warehouse indisponível nem interrompe nenhuma consulta em execução.

Quando você converte um warehouse em um warehouse adaptativo ou de volta para um warehouse padrão, as consultas existentes que estavam sendo executadas nesse warehouse continuam a ser executadas até a conclusão utilizando os recursos de computação existentes. Ao mesmo tempo, o warehouse executa quaisquer novas consultas nos recursos de computação do novo tipo de warehouse. Enquanto as consultas existentes estiverem em execução, você será cobrado por ambos os conjuntos de recursos de computação. Se você estiver convertendo o warehouse de volta para um warehouse padrão, ele não será suspenso automaticamente durante esse período, independentemente de haver ou não consultas utilizando os novos recursos de computação. Quando as consultas existentes forem concluídas, a carga de trabalho será transferida inteiramente para os novos recursos de computação.

Para converter um warehouse padrão em um adaptativo usando o Snowsight:

  1. Faça login no Snowsight.

  2. No menu de navegação, selecione Compute » Warehouses » <warehouse_identifier>.

  3. Selecione o menu (três pontos) » Convert to Adaptive.

  4. Confirme a operação.

Comportamento da propriedade durante a conversão

Ao converter um warehouse padrão em um adaptativo, a única propriedade que você precisa alterar é WAREHOUSE_TYPE. O Snowflake calcula automaticamente os valores apropriados para MAX_QUERY_PERFORMANCE_LEVEL e QUERY_THROUGHPUT_MULTIPLIER.

O sistema deriva esses valores da configuração existente do warehouse padrão:

  • Tamanho do warehouse.

  • MAX_CLUSTER_COUNT (para warehouses multicluster).

  • Fator de escala de QAS.

  • Geração do warehouse (geração de hardware/software).

O objetivo é preservar ou melhorar o desempenho em comparação com o warehouse padrão original, fornecer capacidade de burst suficiente para picos de carga típicos e evitar a necessidade de ajustes manuais ao mudar para o adaptativo.

Como opção, após a conversão você pode substituir MAX_QUERY_PERFORMANCE_LEVEL e QUERY_THROUGHPUT_MULTIPLIER usando ALTER WAREHOUSE. Propriedades do warehouse padrão, como WAREHOUSE_SIZE e MAX_CLUSTER_COUNT, não se aplicam mais após a conversão para o adaptativo, e as propriedades do adaptativo não se aplicam mais após a conversão de volta para o padrão.

Faturamento e preços

Os warehouses adaptativos usam um modelo de cobrança baseado em consultas. O custo de cada consulta depende de fatores como a quantidade de recursos computacionais e de software que ela utiliza, incluindo os tamanhos dos clusters e a capacidade adicional utilizada por recursos como o Query Acceleration Service (QAS). Você não é cobrado pela criação de um warehouse adaptativo: as cobranças começam quando a primeira consulta é executada.

Todas as consultas executadas em um warehouse adaptativo somam-se ao custo total desse warehouse; portanto, você pode continuar usando as estruturas de chargeback e showback existentes. O uso do warehouse adaptativo é relatado como parte de COMPUTE nas instruções de uso, utilizando créditos de warehouse virtual.

Você controla o desempenho e os gastos principalmente por meio de:

  • MAX_QUERY_PERFORMANCE_LEVEL: limita o nível de desempenho por instrução.

  • QUERY_THROUGHPUT_MULTIPLIER: limita a capacidade de burst geral a qualquer instante.

  • Orçamentos e monitores de recursos: controlam o gasto total ao longo do tempo em nível de conta ou de warehouse.

Padrões de configuração típicos:

Tipo de carga de trabalho

Configuração

Cargas de trabalho críticas e sensíveis à latência

MAX_QUERY_PERFORMANCE_LEVEL superior (XLARGE ou superior). QUERY_THROUGHPUT_MULTIPLIER superior. Monitores de recursos ou orçamentos para manter os gastos agregados dentro do plano.

Cargas de trabalho de alta taxa de transferência e sensíveis a custos

MAX_QUERY_PERFORMANCE_LEVEL moderado (MEDIUM ou LARGE). QUERY_THROUGHPUT_MULTIPLIER médio para equilibrar a taxa de transferência com picos de gastos.

Cargas de trabalho com orçamentos restritos

MAX_QUERY_PERFORMANCE_LEVEL inferior. QUERY_THROUGHPUT_MULTIPLIER inferior. Orçamentos rigorosos e monitores de recursos.

Você pode usar as exibições ACCOUNT_USAGE para recuperar dados granulares sobre o consumo de crédito para um warehouse adaptativo específico. Use Exibição WAREHOUSE_METERING_HISTORY para visualizar o consumo de crédito do seu warehouse. Para obter uma lista completa das exibições relevantes, consulte Visualizações do uso da conta.

Para obter mais informações sobre o custo de computação, consulte Explicação dos custos de computação.

Referência de SQL

CREATE ADAPTIVE WAREHOUSE

Cria um novo warehouse virtual adaptativo.

CREATE [ OR REPLACE ] ADAPTIVE WAREHOUSE [ IF NOT EXISTS ] <name>
  [ [ WITH ] adaptiveProperties ]
  [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , ... ] ) ]
  [ objectParams ]

adaptiveProperties ::=
  COMMENT = '<string_literal>'
  MAX_QUERY_PERFORMANCE_LEVEL = { XSMALL | SMALL | MEDIUM | LARGE
                                | XLARGE | XXLARGE | XXXLARGE | X4LARGE }
  QUERY_THROUGHPUT_MULTIPLIER = <integer>

objectParams ::=
  STATEMENT_QUEUED_TIMEOUT_IN_SECONDS = <num>
  STATEMENT_TIMEOUT_IN_SECONDS = <num>

Você também pode criar um warehouse adaptativo usando a sintaxe padrão CREATE WAREHOUSE com WAREHOUSE_TYPE = 'ADAPTIVE':

CREATE [ OR REPLACE ] WAREHOUSE [ IF NOT EXISTS ] <name>
  [ [ WITH ] WAREHOUSE_TYPE = 'ADAPTIVE'
    [ adaptiveProperties ]
  ]
  [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , ... ] ) ]
  [ objectParams ]

Nota

Propriedades de um warehouse padrão, como WAREHOUSE_SIZE, MIN_CLUSTER_COUNT, MAX_CLUSTER_COUNT e SCALING_POLICY, não podem ser definidas em um warehouse adaptativo. Da mesma forma, propriedades de um warehouse adaptativo, como MAX_QUERY_PERFORMANCE_LEVEL e QUERY_THROUGHPUT_MULTIPLIER, não podem ser definidas em um warehouse padrão.

Parâmetros obrigatórios

name

Identificador para o warehouse virtual adaptativo. Deve ser único para sua conta. Deve começar com um caractere alfabético e não pode conter espaços ou caracteres especiais, a menos que estejam entre aspas duplas. Consulte Identificadores de objetos para obter mais detalhes.

Propriedades opcionais

MAX_QUERY_PERFORMANCE_LEVEL = { XSMALL | SMALL | MEDIUM | LARGE | XLARGE | XXLARGE | XXXLARGE | X4LARGE }

Limite superior no nível de desempenho para uma única instrução, expresso como um tamanho de amostra. Padrão: XLARGE.

O Snowflake escolhe um nível de desempenho até esse limite com base nas características da instrução. Instruções menores podem ser executadas em um nível de desempenho inferior para reduzir os gastos. Escolha um valor apropriado para suas maiores consultas.

Para obter mais detalhes, consulte Gerenciando desempenho e taxa de transferência.

QUERY_THROUGHPUT_MULTIPLIER = <integer>

Multiplicador utilizado para calcular a taxa de transferência máxima em qualquer momento, expresso como um fator de escala de número inteiro não negativo sobre o mínimo computado pelo sistema. Valores mais altos aumentam a taxa de transferência máxima (mais trabalho simultâneo) e reduzem o enfileiramento, ao custo de um gasto instantâneo potencialmente maior. Valores mais baixos restringem a taxa de transferência de burst e reduzem o risco de picos repentinos de gastos, mas podem levar a enfileiramentos. Um valor de 0 significa taxa de transferência ilimitada.

Padrão: 2.

Para obter mais detalhes, consulte Gerenciando desempenho e taxa de transferência.

STATEMENT_QUEUED_TIMEOUT_IN_SECONDS = <num>

Tempo máximo, em segundos, que uma instrução SQL pode permanecer enfileirada no warehouse antes que o Snowflake a cancele. Consulte Parâmetros para obter mais detalhes.

STATEMENT_TIMEOUT_IN_SECONDS = <num>

Tempo máximo, em segundos, que uma instrução SQL em execução pode ser executada antes que o Snowflake a cancele. Consulte Parâmetros para obter mais detalhes.

Exemplos

Crie um warehouse adaptativo com valores padrão:

CREATE ADAPTIVE WAREHOUSE my_adaptive_wh;

Crie com um nível de desempenho específico:

CREATE ADAPTIVE WAREHOUSE my_adaptive_wh
  WITH MAX_QUERY_PERFORMANCE_LEVEL = XXLARGE;

Crie com ambas as propriedades:

CREATE ADAPTIVE WAREHOUSE my_adaptive_wh
  WITH MAX_QUERY_PERFORMANCE_LEVEL = MEDIUM
       QUERY_THROUGHPUT_MULTIPLIER = 6;

Crie usando a sintaxe CREATE WAREHOUSE do padrão:

CREATE WAREHOUSE my_adaptive_wh
  WITH WAREHOUSE_TYPE = 'ADAPTIVE'
       MAX_QUERY_PERFORMANCE_LEVEL = LARGE
       QUERY_THROUGHPUT_MULTIPLIER = 3;

ALTER WAREHOUSE (adaptativo)

Você pode usar ALTER WAREHOUSE para converter um warehouse padrão em adaptativo, modificar as propriedades de um warehouse adaptativo ou converter um warehouse adaptativo de volta para o padrão.

Converta um warehouse padrão em adaptativo:

ALTER WAREHOUSE my_warehouse SET WAREHOUSE_TYPE = 'ADAPTIVE';

Modifique as propriedades de um warehouse adaptativo após a criação ou conversão:

ALTER WAREHOUSE my_adaptive_wh SET
  MAX_QUERY_PERFORMANCE_LEVEL = XLARGE
  QUERY_THROUGHPUT_MULTIPLIER = 8;

Converta um warehouse adaptativo de volta para o padrão:

ALTER WAREHOUSE my_warehouse SET WAREHOUSE_TYPE = 'STANDARD';

SHOW WAREHOUSES

O recurso de warehouse adaptativo introduz novas colunas ao comando SHOW WAREHOUSES. As propriedades que não se aplicam a warehouses adaptativos são exibidas como NULL.

As colunas específicas para warehouses adaptativos incluem:

Nome da coluna

Descrição

STATE

Uma das opções:

  • ENABLED (ativo/em execução)

  • DISABLED (inativo)

MAX_QUERY_PERFORMANCE_LEVEL

Expresso como um tamanho de amostra. Limite superior no nível de desempenho por instrução.

QUERY_THROUGHPUT_MULTIPLIER

Fator de escala de número inteiro que controla quanta capacidade de burst o warehouse pode usar a qualquer instante.

DISABLED_REASONS

Um ou mais motivos pelos quais o warehouse adaptativo foi desativado.

Visualizações do uso da conta

As seguintes exibições ACCOUNT_USAGE estão disponíveis para warehouses adaptativos:

Nota

Para warehouses adaptativos, o uso de QAS está incluído nos créditos de computação e não aparece como uma coluna de crédito separada. Use Exibição WAREHOUSE_LOAD_HISTORY para monitorar o comportamento de enfileiramento e entender se deve ajustar MAX_QUERY_PERFORMANCE_LEVEL ou QUERY_THROUGHPUT_MULTIPLIER.

A seguinte consulta de amostra produz uma série temporal de dados de desempenho em nível de warehouse para qualquer warehouse que tenha executado pelo menos uma consulta no estado ADAPTIVE dentro de um período de retrospectiva especificado.

WITH adaptive_whs AS (
  SELECT DISTINCT warehouse_name
  FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY q
  WHERE q.warehouse_size = 'ADAPTIVE'
    AND q.start_time >= DATEADD(day, -7, CURRENT_DATE())
)
SELECT
  q.end_time::DATE AS ds,
  q.warehouse_name,
  IFF(q.warehouse_size = 'ADAPTIVE', 'ADAPTIVE', 'STANDARD') AS warehouse_type,
  AVG(q.total_elapsed_time) AS avg_query_time,
  AVG(q.execution_time) AS avg_exec_time,
  AVG(q.queued_overload_time) AS avg_queued_overload_time,
  AVG(q.queued_provisioning_time) AS avg_queued_provisioning_time
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY q
WHERE q.start_time >= DATEADD(day, -7, CURRENT_DATE())
  AND q.warehouse_name IN (SELECT warehouse_name FROM adaptive_whs)
GROUP BY ALL;

Migração em massa de warehouses padrão para adaptativos

Se você quiser migrar vários warehouses padrão para adaptativos simultaneamente, poderá usar a função SYSTEM$BULK_UPDATE_WH.

Parâmetros para a função SYSTEM$BULK_UPDATE_WH

Parâmetro

Descrição

Valores permitidos

property_name

A propriedade do warehouse a ser atualizada.

'WAREHOUSE_TYPE'

new_value

Novo valor para a propriedade.

'ADAPTIVE' ou 'STANDARD'

property_filter

Filtro JSON nas propriedades do warehouse (por exemplo, padrão de nome, tamanho). Os warehouses que correspondem a todos os filtros são considerados para atualização.

'{"name": "TEST.*"}'

tag_filter

Filtro JSON em tags. Os warehouses devem corresponder a todas as tags especificadas para serem selecionados.

'{"cost-centre": "sales"}'

execution_mode

Modo de operação: execute a atualização ou um efetue um dry run.

'ACTIVE', 'DRY_RUN'

Sugestão de uso:

  1. Primeiro, efetue um dry run e revise os resultados:

    SELECT SYSTEM$BULK_UPDATE_WH(
      'WAREHOUSE_TYPE',
      'ADAPTIVE',
      '{"WAREHOUSE_TYPE": "STANDARD"}',
      'DRY_RUN'
    );
    
  2. Revise a saída e ajuste os filtros, se necessário.

  3. Depois de verificar o dry run, chame a função novamente usando o modo ativo:

    SELECT SYSTEM$BULK_UPDATE_WH(
      'WAREHOUSE_TYPE',
      'ADAPTIVE',
      '{"WAREHOUSE_TYPE": "STANDARD"}',
      'ACTIVE'
    );
    
  4. Revise cuidadosamente os resultados e quaisquer erros antes de repetir ou ampliar o escopo da migração.