Revisione delle fasi del piano di query - 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à.

Revisione delle fasi del piano di query

Puoi visualizzare le fasi in un piano di query eseguendo il comando EXPLAIN. L'esempio seguente mostra una query SQL e spiega l'output. Leggendo il piano di query dal basso verso l'alto, puoi visualizzare tutte le operazioni logiche necessarie per eseguire la query. Per ulteriori informazioni, consultare Piano di query.

explain select eventname, sum(pricepaid) from sales, event where sales.eventid = event.eventid group by eventname order by 2 desc;
XN Merge (cost=1002815366604.92..1002815366606.36 rows=576 width=27) Merge Key: sum(sales.pricepaid) -> XN Network (cost=1002815366604.92..1002815366606.36 rows=576 width=27) Send to leader -> XN Sort (cost=1002815366604.92..1002815366606.36 rows=576 width=27) Sort Key: sum(sales.pricepaid) -> XN HashAggregate (cost=2815366577.07..2815366578.51 rows=576 width=27) -> XN Hash Join DS_BCAST_INNER (cost=109.98..2815365714.80 rows=172456 width=27) Hash Cond: ("outer".eventid = "inner".eventid) -> XN Seq Scan on sales (cost=0.00..1724.56 rows=172456 width=14) -> XN Hash (cost=87.98..87.98 rows=8798 width=21) -> XN Seq Scan on event (cost=0.00..87.98 rows=8798 width=21)

Come parte della generazione di un piano di query, l'ottimizzatore query suddivide il piano in flussi, segmenti e passaggi. L'ottimizzatore query interrompe il piano per prepararsi alla distribuzione dei dati e del carico di lavoro di query ai nodi di calcolo. Per ulteriori informazioni sui segmenti e sulle fasi, consultare Pianificazione di query e flusso di lavoro di esecuzione.

L'illustrazione seguente mostra la query precedente e il piano di query associato. Viene visualizzato il modo in cui le operazioni di query coinvolte eseguono la mappatura dei passaggi utilizzati da Amazon Redshift per generare un codice compilato per le sezioni del nodo di calcolo. Ogni operazione del piano di query viene mappato per più fasi all'interno dei segmenti, talvolta per più segmenti all'interno dei flussi.

In questa illustrazione, query optimizer esegue il piano di query in questo modo:

  1. In Stream 0, la query esegue Segment 0 con un'operazione di scansione sequenziale per eseguire la scansione della tabella events. La query continua a Segment 1 con un'operazione hash per creare la tabella hash per la tabella interna nel join.

  2. In Stream 1, la query esegue Segment 2 con un'operazione di scansione sequenziale per eseguire la scansione della tabella sales. Continua con Segment 2 con un hash join per unire le tabelle in cui le colonne join non sono né chiavi di distribuzione né chiavi di ordinamento. Continua di nuovo con Segment 2 con un aggregato hash per aggregare i risultati. Quindi la query viene eseguita con Segment 3, un'operazione di aggregazione hash per eseguire funzioni aggregate raggruppate non ordinate, e un'operazione di ordinamento per valutare la clausola ORDER BY e altre operazioni di ordinamento.

  3. In Stream 2, la query esegue un'operazione di rete in Segment 4 e Segment 5 per inviare risultati intermedi al nodo leader per ulteriori elaborazioni.

L'ultimo segmento di una query restituisce i dati. Se il set restituito è aggregato o ordinato, i nodi di calcolo inviano ciascuno la parte del risultato intermedio al nodo leader. Il nodo direttivo quindi unisce i dati in modo che il risultato finale possa essere inviato nuovamente al client richiedente.

Per ulteriori informazioni sugli operatori EXPLAIN, vedere EXPLAIN.