Recomendações de otimização sobre Azure Databricks

Consultas lentas e custos elevados de computação geralmente resultam de algumas causas raiz: ler mais dados do que uma consulta precisa, trocar dados entre nós, escolher um plano de consulta mau ou reescrever ficheiros que não mudaram. O Azure Databricks resolve automaticamente muitas destas causas em cargas de trabalho que vão desde o processamento ETL em grande escala até consultas interativas e ad hoc. Outras otimizações aplicam-se apenas quando as ativa ou as ajusta para uma carga de trabalho específica.

Esta página começa com recomendações para a maioria das cargas de trabalho, depois agrupa as otimizações consoante funcionam automaticamente ou exigem que as configure, e descreve o problema que cada uma resolve. A maioria das otimizações do Databricks Runtime requer o Delta Lake, o formato padrão para tabelas no Azure Databricks.

Comece com estas recomendações

Estas escolhas proporcionam os maiores ganhos de desempenho para a maioria das cargas de trabalho. Também ajudam muitas das otimizações automáticas nesta página a funcionar ao máximo.

  • Utilize o agrupamento líquido para a disposição das tabelas.O agrupamento líquido substitui o particionamento da tabela e ZORDER. Organiza os dados pelas colunas onde filtras frequentemente, o que melhora o data skipping e a poda dinâmica de ficheiros.
  • Utilize tabelas geridas pelo Unity Catalog.A otimização preditiva mantém automaticamente as tabelas geridas. Consulte as tabelas geridas do Unity Catalog para Delta Lake e Apache Iceberg.
  • Utilize a computação ativada pelo Photon. A E/S preditiva requer Photon, tal como a poda dinâmica de ficheiros nas instruções MERGE, UPDATE e DELETE. Veja O que é Photon?.
  • Ativar deletion vectors. A I/O Preditiva utiliza vetores de deleção para evitar reescrever ficheiros inteiros durante atualizações, eliminações e fusões, e a concorrência ao nível das linhas requer esses vetores. Para tabelas Delta Lake, deve ativar explicitamente os vetores de deleção. Ver Vetores de eliminação em Databricks.
  • Utilize o mais recente Databricks Runtime. As novas versões incluem as mais recentes melhorias de desempenho. Algumas otimizações requerem uma versão mínima do Databricks Runtime ou computação com Photon. Consulte cada página para os requisitos.

Otimizações automáticas

Estas otimizações estão ativadas por defeito. Não precisa de os ativar, mas alguns trazem mais benefícios quando as suas tabelas e a capacidade de computação cumprem certas condições, como usar o Photon ou manter as estatísticas das tabelas atualizadas.

  • Cache de disco: Acelera consultas que leem repetidamente os mesmos ficheiros de dados remotos do Parquet e do Delta Lake. O Azure Databricks armazena em cache cópias dos ficheiros no armazenamento local dos nós de computação para que as leituras posteriores sejam efetuadas localmente. O Azure Databricks ativa-o automaticamente nos tipos de instância worker que o suportam.
  • Eliminação dinâmica de ficheiros: Ignora ficheiros que não podem conter linhas correspondentes em joins em tabelas Delta Lake. MERGE, UPDATE e DELETE as declarações requerem computação com Photon ativado para poda dinâmica de ficheiros.
  • Low shuffle merge: Acelera MERGE as operações que atualizam ou eliminam algumas linhas em cada ficheiro. A fusão com baixa reorganização (shuffle) processa linhas não modificadas sem embaralhar e preserva o seu layout de dados existente.
  • Execução adaptativa de consultas: Re-otimiza os planos de consulta enquanto as consultas são executadas, com base no tamanho real dos dados. Isto corrige estratégias de junção lentas, demasiadas tarefas pequenas e tarefas enviesadas que resultam de estimativas imprecisas.
  • E/S Preditiva: Acelera as varreduras de dados e reduz os dados reescritos durante atualizações, eliminações e fusões em computação com Photon.
  • Otimizador baseado em custos: Utiliza estatísticas de tabelas e colunas para escolher planos de consulta eficientes, especialmente para consultas com múltiplas junções. O otimizador baseado em custos depende de estatísticas, por isso recolha-as e mantenha-as atualizadas.
  • Otimização preditiva: Executa OPTIMIZE, VACUUM e ANALYZE automaticamente em tabelas geridas pelo Unity Catalog, pelo que não precisa de agendar a manutenção das tabelas. Também mantém atualizadas as estatísticas que o otimizador baseado em custos utiliza. Para verificar se está ativado para a sua conta, veja Verificar se a otimização preditiva está ativada.

Otimizações que configura

Estas otimizações exigem que as ative, ajuste ou altere a configuração da tabela. Use-os quando uma carga de trabalho precisar de comportamentos que os padrões não cobrem.

  • Suporte ao arquivamento: Utilize quando as políticas do ciclo de vida na cloud transferem ficheiros de tabela mais antigos para níveis de armazenamento arquivístico para reduzir custos de armazenamento. O suporte para arquivamento diz ao Azure Databricks para ignorar ficheiros mais antigos do que um período especificado, para que a política de ciclo de vida não quebre consultas que apenas leem dados recentes. Esta funcionalidade está em Pré-visualização Pública.
  • Range join: Usar quando as junções usam um ponto num intervalo ou uma condição de sobreposição de intervalos. O SQL do Databricks otimiza automaticamente as junções por intervalo. Noutras plataformas de computação, ajusta os range joins com join hints ou configuração da sessão.
  • Níveis de isolamento e conflitos de escrita: Usar quando escritas concorrentes na mesma tabela entram em conflito, ou quando uma carga de trabalho necessita de garantias mais rigorosas do que o nível padrão de isolamento WriteSerializable. O isolamento serializável reduz o débito para escritas concorrentes. A concorrência ao nível das linhas resolve automaticamente muitos conflitos entre escritas concorrentes em tabelas que cumprem os seus requisitos.
  • Índices de pesquisa em texto completo: Usar quando as consultas procuram nas colunas de texto substrings ou palavras com as funções search ou isearch. O índice ignora ficheiros que não podem conter linhas correspondentes. Este recurso está em versão Beta.

Nota

Os índices de filtro de Bloom são uma funcionalidade preterida para ignorar dados. Adicionam sobrecarga de escrita e são difíceis de ajustar. Se as suas tabelas os tiverem, consulte os índices de filtro de Bloom (obsoletos) para os substituir e depois removê-los.

Outras funcionalidades de desempenho

Diagnosticar cargas de trabalho lentas ou dispendiosas

Se uma carga de trabalho for mais lenta ou mais cara do que o esperado e não souberes porquê, usa a interface do Spark para encontrar o gargalo antes de mudares de configuração. Veja Diagnosticar problemas de custo e desempenho usando a interface do Spark.