Pianificazione di query e flusso di lavoro di esecuzione - Amazon Redshift

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à.

Pianificazione di query e flusso di lavoro di esecuzione

La seguente illustrazione fornisce una visualizzazione di alto livello della pianificazione della query e dell'esecuzione del flusso di lavoro.

La pianificazione della query e il flusso di lavoro dell'esecuzione seguono queste fasi:

  1. Il nodo principale riceve la query e analizza l'SQL.

  2. Il parser produce un struttura ad albero di query iniziale, ovvero una rappresentazione logica della query originale. Amazon Redshift quindi inserisce questa struttura ad albero di query nell'ottimizzatore di query.

  3. L'ottimizzatore valuta e, se necessario, riscrive la query per massimizzare la sua efficienza. A volte il risultato di questo processo è la creazione di query multiple correlate che ne rimpiazzano una singola.

  4. L'ottimizzatore genera un piano di query (o più di uno, se la fase precedente ha prodotto più query) per l'esecuzione con le prestazioni migliori. Il piano di query specifica le opzioni di esecuzione come il tipo di combinazione, l'ordine di combinazione, le opzioni di aggregazione e i requisiti di distribuzione dei dati.

    Puoi utilizzare il comando EXPLAIN per visualizzare il piano di query. Il piano di query è uno strumento fondamentale per l'analisi e l'ottimizzazione di query complesse. Per ulteriori informazioni, consulta Piano di query.

  5. Il motore di esecuzione traduce il piano di query in fasi, segmenti e flussi:

    Fase

    Ogni fase è un'operazione individuale necessaria durante l'esecuzione di query. Le fasi possono essere combinate per permettere ai nodi di calcolo di eseguire una query, una combinazione o un'altra operazione del database.

    Segment

    Una combinazione di più fasi che può essere eseguita tramite un singolo processo; è inoltre l'unità di elaborazione più piccola eseguibile tramite una sezione di nodi di calcolo. Una sezione è l'unità di elaborazione parallela in Amazon Redshift. I segmenti in un flusso eseguiti in parallelo.

    Flusso

    Un insieme di segmenti che possono essere suddivisi sulle sezioni dei nodi di calcolo disponibili.

    Il motore di esecuzione genera un codice compilato basato su fasi, segmenti e flussi. I codici compilati vengono eseguiti più velocemente rispetto ai codici interpretati e utilizzano una minore capacità di elaborazione. Questo codice compilato viene poi trasmesso ai nodi di calcolo.

    Nota

    Quando esegui il benchmarking delle tue query, dovresti sempre confrontare i tempi della seconda esecuzione di una query, perché il tempo della prima esecuzione include i costi della compilazione del codice. Per ulteriori informazioni, consulta Fattori che influenzano le prestazioni della query.

  6. Le sezioni di nodi computati eseguono i segmenti della query in parallelo. Essendo parte di questo processo, Amazon Redshift sfrutta la comunicazione di rete ottimizzata, la memoria e la gestione del disco per inviare risultati intermedi da una fase del piano di query alla successiva. Questo aiuta anche a velocizzare l'esecuzione delle query.

Le fasi 5 e 6 si verificano una sola volta per ogni flusso. Il motore crea i segmenti eseguibili per un flusso e li invia ai nodi di calcolo. Quando i segmenti di quel flusso sono completi, il motore genera i segmenti del flusso successivo. In questo modo, il motore riesce ad analizzare cosa è successo nel flusso precedente (ad esempio, se le operazioni erano basate su disco), al fine di influenzare la generazione di segmenti nel prossimo flusso.

Quando i nodi di calcolo vengono terminati, restituiscono i risultati della query al nodo principale per eseguire l'elaborazione finale. Il nodo principale unisce i dati in un unico insieme di risultati e gestisce qualunque ordinamento o aggregazione di cui si necessiti. Il nodo principale infine restituisce i risultati al client.

Nota

I nodi di calcolo, se necessario, possono restituire dei dati al nodo principale durante l'esecuzione della query. Ad esempio, se disponi di una sottoquery con una clausola LIMIT, il limite viene applicato sul nodo principale prima che i dati vengano distribuiti nuovamente all'interno del cluster per elaborazioni future.