

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Principali aree di interesse per il miglioramento delle prestazioni
<a name="emr-trino-performance-areas"></a>

Trino massimizza il parallelismo delle query e l'ottimizzazione della memoria. Questa architettura offre flessibilità consentendole di interrogare più e varie fonti di dati con una scalabilità efficiente. Le aree chiave di miglioramento delle prestazioni in Trino includono quelle elencate di seguito.

## Ottimizzazione della memoria
<a name="emr-trino-performance-areas-optimization"></a>

La gestione della memoria in Trino è fondamentale per ottenere prestazioni e stabilità elevate, specialmente quando si eseguono query complesse e di grandi dimensioni. Trino utilizza un modello di memoria distribuito. In questo modello, la memoria viene allocata tra i nodi di lavoro per l'elaborazione di attività, aggregazioni, join e altre operazioni. L'elenco seguente presenta una raccolta di queste impostazioni:
+ **query.max-memory**: imposta la memoria massima disponibile per una singola query nell'intero cluster. Si tratta di un limite rigido; se una query supera questa memoria, avrà esito negativo.
+ **interrogazione. max-memory-per-node** — Definisce la memoria massima che una query può consumare su ogni nodo di lavoro. Questa impostazione garantisce che nessuna singola query monopolizzi le risorse di nessun lavoratore.
+ **Dimensione dell'heap JVM**: configurata a livello di JVM, imposta la dimensione massima dell'heap per il processo del server Trino su ciascun nodo. **Questo valore dovrebbe generalmente essere maggiore delle configurazioni relative alla memoria (questa è la somma delle query). **max-memory-per-node**e memoria. heap-headroom-per-node**) in Trino per evitare che il sistema esaurisca la memoria a livello di JVM.
+ **memoria. heap-headroom-per-node** — specifica una quantità di memoria buffer da escludere dalla dimensione dell'heap JVM per le operazioni non di query. Questo è fondamentale per garantire un sovraccarico sufficiente per le operazioni interne e la raccolta dei rifiuti.

## Filtraggio dinamico
<a name="emr-trino-performance-areas-dynamic"></a>

Il filtraggio dinamico in Trino è una tecnica di ottimizzazione che migliora le prestazioni delle query riducendo la quantità di dati elaborati, in particolare durante i join. Applica dinamicamente le condizioni di filtro per limitare i dati scansionati da un lato di un join, in base ai dati visualizzati sull'altro lato, il che è particolarmente utile nelle query in cui un lato del join è altamente selettivo (ovvero contiene un piccolo sottoinsieme di dati). È abilitato per impostazione predefinita su Amazon EMR. Di seguito è riportato un esempio di query:

```
SELECT orders.order_id, orders.total_amount
FROM orders
JOIN customers ON orders.customer_id = customers.customer_id
WHERE customers.country = 'France';
```

Senza filtri dinamici, Trino scansiona l'intera tabella degli ordini in un join, anche se solo un piccolo sottoinsieme di clienti (quelli provenienti dalla Francia) è rilevante. Questo approccio legge tutte le righe della tabella **degli ordini**, con conseguenti costi elevati e di elaborazione. I/O Con il filtraggio dinamico, Trino esegue inizialmente la scansione della tabella **dei clienti** più piccoli, recupera i valori customer\$1id solo per i clienti provenienti dalla Francia e quindi applica questo sottoinsieme come filtro agli ordini. Ciò significa che vengono scansionate solo le righe pertinenti degli **ordini**, quelle con un customer\$1id corrispondente al sottoinsieme filtrato, riducendo significativamente i record elaborati.

## Versate su disco
<a name="emr-trino-performance-areas-spill"></a>

 In Trino, la fuoriuscita del disco consente di scaricare su disco i risultati delle query intermedie, permettendo il completamento di query che richiedono molta memoria, anche se superano i limiti di memoria impostati da o. `query_max_memory` `query_max_memory_per_node` Per impostazione predefinita, Trino applica questi limiti per garantire un'allocazione equa della memoria e prevenire il deadlock del cluster. Tuttavia, quando una query di grandi dimensioni supera questi limiti, rischia di essere interrotta. La fuoriuscita del disco risolve questo problema utilizzando `revocable memory` una query che consente di prendere in prestito memoria aggiuntiva che può essere revocata se sono necessarie risorse altrove. Quando la memoria viene revocata, i dati intermedi vengono trasferiti sul disco, permettendo alle query di continuare l'elaborazione senza superare i limiti di memoria. Tieni presente che una query forzata a riversarsi su disco può avere tempi di esecuzione più lunghi, pertanto è disattivata per impostazione predefinita. Per abilitare lo spill su Amazon EMR, utilizza la seguente configurazione:
+ `spill-enabled=true`— Consente la fuoriuscita del disco quando l'utilizzo della memoria supera le soglie disponibili.
+ `spill-paths`— Definisce le directory in cui vengono archiviati i dati fuoriusciti,. `spill-paths=/mnt/spill`