As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Principais áreas de foco para melhoria da performance
O Trino maximiza o paralelismo de consultas e a otimização da memória. Essa arquitetura oferece flexibilidade ao permitir que ela consulte diversas fontes de dados variadas e, ao mesmo tempo, escale com eficiência. As principais áreas de melhoria de performance no Trino incluem as listadas abaixo.
Otimização de memória
O gerenciamento de memória no Trino é fundamental para alcançar alta performance e estabilidade, especialmente ao executar consultas grandes e complexas. O Trino usa um modelo de memória distribuída. Nesse modelo, a memória é alocada entre nós de processamento para processar tarefas, agregações, uniões e outras operações. A lista a seguir apresenta uma coleção dessas configurações:
query.max-memory: define a memória máxima disponível para uma única consulta em todo o cluster. Esse é um limite fixo. Se uma consulta exceder essa memória, ela falhará.
consulta. max-memory-per-node — Define a memória máxima que uma consulta pode consumir em cada nó de trabalho. Essa configuração garante que nenhuma consulta monopolize os recursos de nenhum processamento.
Tamanho do heap da JVM: configurado no nível da JVM, define o tamanho máximo do heap para o processo do servidor Trino em cada nó. Esse valor geralmente deve ser maior do que as configurações relacionadas à memória (essa é a soma da consulta). max-memory-per-nodee memória. heap-headroom-per-node) no Trino para evitar que o sistema fique sem memória no nível da JVM.
memória. heap-headroom-per-node — Especifica a quantidade de memória do buffer a ser omitida do tamanho do heap da JVM para operações que não sejam de consulta. Isso é crucial para garantir despesas gerais suficientes para operações internas e coleta de resíduos.
Filtragem dinâmica
A filtragem dinâmica no Trino é uma técnica de otimização que melhora a performance das consultas ao reduzir a quantidade de dados processados, principalmente durante junções. Ela aplica condições de filtro dinamicamente para limitar os dados verificados por um lado de uma junção, com base nos dados vistos no outro lado, o que é especialmente útil em consultas em que um lado da junção é altamente seletivo (o que significa que contém um pequeno subconjunto de dados). Ela está habilitada por padrão no Amazon EMR. Veja a seguir um exemplo de consulta:
SELECT orders.order_id, orders.total_amount FROM orders JOIN customers ON orders.customer_id = customers.customer_id WHERE customers.country = 'France';
Sem a filtragem dinâmica, o Trino verifica toda a tabela “orders” em uma junção, embora apenas um pequeno subconjunto de clientes (os da França) seja relevante. Essa abordagem lê todas as linhas na tabela de pedidos, resultando em altos I/O custos de processamento. Com a filtragem dinâmica, o Trino verifica inicialmente a tabela customers menor, recupera valores de customer_id somente para clientes da França e, em seguida, aplica esse subconjunto como um filtro à tabela “orders”. Isso significa que apenas as linhas relevantes em orders, aquelas com um customer_id correspondente ao subconjunto filtrado, são verificadas, o que reduz significativamente os registros processados.
Vazamento para o disco
No Trino, o vazamento para o disco permite que resultados de consultas intermediárias sejam transferidos para o disco, o que possibilita a conclusão de consultas com uso intensivo de memória, mesmo que elas excedam os limites de memória definidos por query_max_memory ou query_max_memory_per_node. Por padrão, o Trino impõe esses limites para garantir a alocação justa de memória e evitar impasses do cluster. Porém, quando uma consulta grande ultrapassa esses limites, ela corre o risco de ser encerrada. O vazamento para o disco resolve isso com o uso de revocable memory, o que permite que uma consulta peça emprestado memória adicional que pode ser revogada se forem necessários recursos em outro lugar. Quando a memória é revogada, os dados intermediários vazam para o disco, permitindo que as consultas continuem a ser processadas sem excederem os limites de memória. Observe que uma consulta que é forçada a ser transferida para o disco pode ter um tempo de execução mais longo e, portanto, esse recurso está desabilitado por padrão. Para habilitar o vazamento no Amazon EMR, use a seguinte configuração:
spill-enabled=true: habilita o vazamento para o disco quando o uso da memória excede os limites disponíveis.spill-paths: define os diretórios em que os dados vazados são armazenados,spill-paths=/mnt/spill.