Como otimizar o cache do warehouse

Este tópico discute como um proprietário ou administrador de warehouse pode otimizar o cache de um warehouse a fim de melhorar o desempenho das consultas executadas no warehouse.

Um warehouse em execução mantém um cache de dados de tabela que pode ser acessado por consultas executadas no mesmo warehouse. Isto pode melhorar o desempenho das consultas subsequentes se elas forem capazes de ler a partir do cache em vez de a partir de tabelas.

Nota

Você deve ter acesso ao banco de dados SNOWFLAKE compartilhado para executar as consultas de diagnóstico fornecidas neste tópico. Por padrão, somente a função ACCOUNTADMIN tem os privilégios necessários para executar as consultas.

Como encontrar dados digitalizados a partir do cache

A consulta a seguir fornece a porcentagem de dados digitalizados a partir do cache, agregados em todas as consultas e separados por warehouse.

Se você tiver consultas que podem se beneficiar dos dados escaneados do cache (por exemplo, consultas frequentes e similares) e a porcentagem de dados digitalizados a partir do cache for baixa, você poderá ver um aumento de desempenho ao otimizar o cache.

SELECT warehouse_name
  ,COUNT(*) AS query_count
  ,SUM(bytes_scanned) AS bytes_scanned
  ,SUM(bytes_scanned*percentage_scanned_from_cache) AS bytes_scanned_from_cache
  ,SUM(bytes_scanned*percentage_scanned_from_cache) / SUM(bytes_scanned) AS percent_scanned_from_cache
FROM snowflake.account_usage.query_history
WHERE start_time >= dateadd(month,-1,current_timestamp())
  AND bytes_scanned > 0
GROUP BY 1
ORDER BY 5;
Copy

Sobre o cache e a suspensão automática

A configuração de suspensão automática do warehouse pode ter um impacto direto no desempenho da consulta, uma vez que o cache é descartado quando o warehouse é suspenso. Se um warehouse estiver executando consultas frequentes e semelhantes, pode não fazer sentido suspender o warehouse entre consultas porque o cache pode ser descartado antes que a próxima consulta seja executada.

Você pode usar as seguintes diretrizes gerais ao definir esse limite de tempo de suspensão automática:

  • Para tarefas, Snowflake recomenda a suspensão imediata.

  • Para casos de uso de DevOps, DataOps e Data Science, Snowflake recomenda configurar a suspensão automática para aproximadamente 5 minutos, já que o cache não é tão importante para consultas ad-hoc e exclusivas.

  • Para os warehouses de consulta, por exemplo os casos de uso de BI e SELECT, Snowflake recomenda ajustar a suspensão automática para pelo menos 10 minutos para manter o cache para os usuários.

Considerações sobre custo

Tenha em mente que um warehouse em funcionamento consome créditos, mesmo que não esteja processando consultas. Certifique-se de que sua configuração de suspensão automática esteja de acordo com sua carga de trabalho. Por exemplo, se um warehouse executar uma consulta a cada 30 minutos, não faz sentido definir a configuração de suspensão automática para 10 minutos. O warehouse consumirá créditos enquanto estiver ocioso sem obter os benefícios de um cache, pois ele será descartado antes da próxima consulta ser executada.

Como configurar a suspensão automática

Para mudar quanto tempo deve passar antes que um warehouse seja suspenso e seu cache seja descartado:

Snowsight
  1. Entre em Snowsight.

  2. Navegue até Admin » Warehouses.

  3. Encontre o warehouse e selecione » Edit.

  4. Certifique-se de que Auto Suspend esteja ativado.

  5. No campo Suspend After (min), digite o número de minutos que devem transcorrer antes que o warehouse seja suspenso.

  6. Selecione Save Warehouse.

SQL

Use o comando ALTER WAREHOUSE para alterar o limite de tempo de suspensão automática, que é especificado em segundos, não em minutos. Por exemplo:

ALTER WAREHOUSE my_wh SET AUTO_SUSPEND = 600;
Copy