Recomendações de otimização em Databricks
Queries lentas e custos altos de compute geralmente vêm de algumas causas raiz: ler mais dados do que uma query precisa, embaralhar dados entre nós, escolher um plano de query ruim ou reescrever arquivos que não mudaram. O Databricks resolve muitas dessas causas automaticamente em cargas de trabalho que variam de processamento ETL de grande escala a queries ad-hoc interativas. Outras otimizações só se aplicam quando você as ativa ou ajusta para uma carga de trabalho específica.
Esta página começa com recomendações para a maioria das cargas de trabalho, agrupa as otimizações conforme tenham execução automática ou exijam que você as configure, e descreve o problema que cada uma resolve. A maioria das otimizações do Databricks Runtime requer o Delta Lake, o formato default para tabelas no Databricks.
Comece com estas recomendações
Essas opções oferecem os maiores ganhos de desempenho para a maioria das cargas de trabalho. Eles também ajudam muitas das otimizações automáticas nesta página a funcionar com efeito total.
- Use cluster líquido para disposição de tabela. Clusters líquidos substituem o particionamento de tabela e
ZORDER. Ele organiza os dados pelas colunas nas quais você filtra com frequência, o que melhora a supressão de dados e a remoção dinâmica de arquivos. - Use tabelas gerenciadas do Unity Catalog. A otimização preditiva mantém as tabelas gerenciadas automaticamente. Consulte Tabelas gerenciadas do Unity Catalog para Delta Lake e Apache Iceberg.
- Use compute habilitado para Photon. O E/S preditivo requer o Photon, assim como a remoção dinâmica de arquivos nas instruções
MERGE,UPDATEeDELETE. Consulte O que é Photon?. - Ative vetores de exclusão. A E/S preditiva usa vetores de exclusão para evitar a reescrita de arquivos inteiros durante atualizações, exclusões e merges, e a simultaneidade em nível de linha os exige. Para tabelas Delta Lake, você deve ativar explicitamente os vetores de exclusão. Consulte Vetores de exclusão no Databricks.
- Use o Databricks Runtime mais recente. As novas versões incluem os aprimoramentos de desempenho mais recentes. Algumas otimizações requerem uma versão mínima do Databricks Runtime ou compute com Photon habilitado. Consulte cada página para ver os requisitos.
Otimizações automáticas
Essas otimizações estão ativadas por default. Você não precisa ativá-los, mas alguns oferecem mais benefícios quando suas tabelas e compute atendem a certas condições, como usar Photon ou manter as estatísticas da tabela atualizadas.
- Armazenamento em cache em disco: Acelera as consultas que leem repetidamente os mesmos arquivos de dados Parquet e Delta Lake remotos. O Databricks armazena em cache cópias dos arquivos no armazenamento local dos nós de compute para que as leituras posteriores sejam executadas localmente. O Databricks o habilita automaticamente em tipos de instância de worker que oferecem suporte a ele.
- Remoção dinâmica de arquivos: ignora arquivos que não podem conter linhas correspondentes em join nas tabelas do Delta Lake. As instruções
MERGE,UPDATEeDELETErequerem compute habilitado para Photon para remoção dinâmica de arquivos. - Low shuffle merge: acelera operações
MERGEque atualizam ou excluem algumas linhas em cada arquivo. O merge de baixo embaralhamento processa linhas não modificadas sem embaralhamento e preserva sua disposição de dados existente. - Execução de query adaptativa: otimiza novamente os planos de query enquanto as querys são executadas, com base no tamanho real dos dados. Isso corrige estratégias de join lentas, muitas tarefas pequenas e tarefas distorcidas que resultam de estimativas imprecisas.
- E/S preditiva: Acelera as varreduras de dados e reduz os dados reescritos durante atualizações, exclusões e merges em compute habilitada para Photon.
- Otimizador baseado em custos: Usa estatísticas de tabela e coluna para escolher planos de query eficientes, especialmente para queries com múltiplos joins. O otimizador baseado em custos depende de estatísticas, portanto, colete-as e mantenha-as atualizadas.
- Otimização preditiva: Execução
OPTIMIZE,VACUUMeANALYZEem tabelas gerenciadas do Unity Catalog automaticamente, para que você não precise programar a manutenção da tabela. Também mantém atualizadas as estatísticas que o otimizador baseado em custos usa. Para verificar se está habilitado para sua account, consulte Verificar se a otimização preditiva está habilitada.
Otimizações que você configura
Essas otimizações exigem que você as ative, ajuste-as ou altere a configuração da tabela. Use-os quando uma carga de trabalho precisar de um comportamento que os default não cobrem.
-
Suporte de arquivamento: Use quando as políticas de ciclo de vida de cloud movem arquivos de tabela mais antigos para camadas de armazenamento de arquivamento para reduzir os custos de armazenamento. O suporte de arquivamento instrui o Databricks a ignorar arquivos mais antigos que um período especificado, para que a política de ciclo de vida não quebre consultas que leem apenas dados recentes. Esse recurso está em Prévia Pública.
-
join de intervalo: Use quando os joins usam uma condição de ponto em intervalo ou sobreposição de intervalo. O Databricks SQL otimiza junções de intervalo automaticamente. Em outros compute, ajuste as joins de intervalo com dicas de join ou configuração de sessão.
-
Níveis de isolamento e conflitos de gravação: use quando gravações concorrentes na mesma tabela entrarem em conflito ou quando uma workload precisar de garantias mais rígidas do que o nível de isolamento default WriteSerializable. O isolamento serializável reduz o throughput para gravações concorrentes. A simultaneidade em nível de linha resolve automaticamente muitos conflitos entre gravações concorrentes em tabelas que atendem aos seus requisitos.
-
Índices de pesquisa de texto completo: use quando as consultas procurarem colunas de texto por substrings ou palavras com as funções
searchouisearch. O índice ignora arquivos que não contêm linhas correspondentes. Esse recurso está em beta.
Os índices de filtro de Bloom são um recurso de pulo de dados obsoleto. Eles aumentam a sobrecarga de gravação e são difíceis de ajustar. Se as suas tabelas os tiverem, consulte Índices de filtro de Bloom (obsoletos) para substituí-los e removê-los.
Outros recursos de desempenho
- Funções de ordem mais alta têm desempenho integrado e otimizado para muitas operações que não têm operadores Spark comuns. Funções de ordem mais alta têm melhor desempenho do que funções definidas pelo usuário.
- O Databricks tem operadores integrados e uma sintaxe especial para trabalhar com tipos de dados complexos, incluindo arrays, structs e strings JSON.
- As consultas do Spark SQL consultam strings JSON sem analisá-las primeiro.
- Para controlar o tamanho dos arquivos de dados que as gravações produzem, consulte Controlar o tamanho do arquivo de dados.
- Para obter orientações sobre design e manutenção de tabelas, consulte Práticas recomendadas: Delta Lake.
Diagnosticar cargas de trabalho lentas ou caras
Se uma carga de trabalho estiver mais lenta ou cara do que o esperado e você não souber o motivo, use o Spark UI para encontrar o gargalo antes de alterar a configuração. Consulte Diagnosticar problemas de custo e desempenho usando o Spark UI.