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

Prestazioni

Amazon Redshift garantisce un'esecuzione di query estremamente rapida tramite l'uso di queste caratteristiche delle prestazioni.

Architetture MPP (Massively Parallel Processing)

MPP (Massively Parallel Processing) permette la rapida esecuzione delle query più complesse che operano su grandi quantità di dati. Più nodi di calcolo gestiscono l'elaborazione di tutte le query, producendo l'aggregazione dei risultati finali, con ogni core di ciascun nodo che esegue gli stessi segmenti compilati su parti dell'intero set di dati.

Amazon Redshift distribuisce le righe di una tabella nei nodi di calcolo in modo che i dati possano essere elaborati in parallelo. Selezionando una chiave di distribuzione appropriata per ogni tabella, puoi ottimizzare la distribuzione dei dati per bilanciare il carico di lavoro e ridurre al minimo lo spostamento dei dati da nodo a nodo. Per ulteriori informazioni, consultare Scelta del migliore stile di distribuzione.

Il caricamento di dati da file di testo sfrutta l'elaborazione parallela tramite la distribuzione del carico di lavoro tra più nodi, leggendo simultaneamente da più file. Per ulteriori informazioni su come caricare dati in tabelle, consultare Best practice di Amazon Redshift per il caricamento di dati.

Storage dei dati a colonne

Lo storage a colonne per le tabelle di database riduce drasticamente i requisiti complessivi di I/O su disco ed è un fattore importante nell'ottimizzazione delle prestazioni delle query di analisi. L'archiviazione a colonne delle informazioni delle tabelle di database riduce il numero di richieste di I/O su disco e la quantità di dati da caricare dal disco. Il caricamento di meno dati in memoria permette ad Amazon Redshift di eseguire più elaborazione in memoria durante l'esecuzione di query. Per una spiegazione più dettagliata, consultare Storage colonnare.

Quando le colonne sono ordinate nel modo appropriato, l'elaboratore di query è in grado di escludere rapidamente un subset di blocchi di dati di grandi dimensioni. Per ulteriori informazioni, consultare Scelta della migliore chiave di ordinamento.

Compressione dei dati

La compressione dei dati riduce i requisiti di storage, riducendo di conseguenza l'I/O su disco e migliorando le prestazioni delle query. Quando si esegue una query, i dati compressi vengono letti in memoria e decompressi durante l'esecuzione della query. Il caricamento di meno dati in memoria permette ad Amazon Redshift di allocare più memoria per analizzare i dati. Poiché lo storage a colonne archivia dati simili in sequenza, Amazon Redshift è in grado di applicare codifiche di compressione adattive appositamente associate a tipi di dati a colonne. Il modo migliore per abilitare la compressione dei dati su colonne di tabella è permettendo ad Amazon Redshift di applicare codifiche di compressione ottimali durante il caricamento dei dati nella tabella. Per ulteriori informazioni sull'uso della compressione dei dati automatica, consultare Caricamento di tabelle con compressione automatica.

Ottimizzatore di query

Il motore di esecuzione di query di Amazon Redshift include un ottimizzatore di query compatibile con MPP e sfrutta inoltre l'archiviazione di dati basata su colonne. L'ottimizzatore di query di Amazon Redshift implementa estensioni e miglioramenti significativi per l'elaborazione di query di analisi complesse che includono spesso unioni di più tabelle, sottoquery e aggregazione. Per ulteriori informazioni sull'ottimizzazione delle query, consultare Ottimizzazione delle prestazioni delle query.

Caching dei risultati

Per ridurre il tempo di esecuzione delle query e migliorare le prestazioni del sistema, Amazon Redshift memorizza i risultati di certi tipi di query nella memoria cache del nodo principale. Quando un utente invia una query, Amazon Redshift controlla nella cache dei risultati l'eventuale presenza di una copia valida dei risultati della query nella cache. Se viene trovata una corrispondenza nella cache dei risultati, Amazon Redshift usa i risultati memorizzati nella cache e non esegue la query. Il caching dei risultati è trasparente all'utente.

Per impostazione predefinita, il caching dei risultati è abilitato. Per disattivare il caching dei risultati per la sessione corrente, imposta il parametro enable_result_cache_for_session su off.

Amazon Redshift usa i risultati nella cache per una nuova query quando si verificano tutte queste condizioni:

  • L'utente che invia la query dispone dell'autorizzazione per accedere agli oggetti usati nella query.

  • La tabella o le visualizzazioni nella query non sono state modificate.

  • La query non usa una funzione che deve essere valutata a ogni esecuzione, come GETDATE.

  • La query non fa riferimento a tabelle esterne Amazon Redshift Spectrum.

  • I parametri di configurazione che potrebbero influire sui risultati della query sono invariati.

  • La query corrisponde sintatticamente alla query nella cache.

Per massimizzare l'efficacia della cache e l'uso efficiente delle risorse, Amazon Redshift non memorizza nella cache alcuni set di risultati delle query di grandi dimensioni. Amazon Redshift determina se memorizzare nella cache i risultati delle query in base a diversi fattori. Questi fattori includono il numero di voci nella cache e il tipo di istanza del cluster di Amazon Redshift.

Per determinare se una query ha usato la cache dei risultati, eseguire una query sulla vista di sistema SVL_QLOG. Se una query ha usato la cache dei risultati, la colonna di query di origine restituisce l'ID query della query di origine. Se il caching dei risultati non è stato usato, il valore della colonna di query di origine è NULL.

L'esempio seguente mostra che le query inviate da userid 104 e userid 102 usano la cache dei risultati delle query eseguite da userid 100.

select userid, query, elapsed, source_query from svl_qlog where userid > 1 order by query desc; userid | query | elapsed | source_query -------+--------+----------+------------- 104 | 629035 | 27 | 628919 104 | 629034 | 60 | 628900 104 | 629033 | 23 | 628891 102 | 629017 | 1229393 | 102 | 628942 | 28 | 628919 102 | 628941 | 57 | 628900 102 | 628940 | 26 | 628891 100 | 628919 | 84295686 | 100 | 628900 | 87015637 | 100 | 628891 | 58808694 |

Codice compilato

Il nodo principale distribuisce codice compilato completamente ottimizzato tra tutti i nodi di un cluster. La compilazione della query riduce la gestione associata a un interprete e di conseguenza aumenta la velocità di esecuzione, in particolare per le query complesse. Il codice compilato viene memorizzato nella cache e condiviso tra sessioni sullo stesso cluster. Di conseguenza, le esecuzioni future della stessa query saranno più veloci, spesso anche quando i parametri sono diversi.

Il motore di esecuzione delle query compila codice diverso per i protocolli di connessione JDBC e ODBC in modo che ognuno dei due client che usano protocolli diversi paghi i costi della prima compilazione del codice. Tuttavia, altri client che usano lo stesso protocollo godranno del vantaggio di poter condividere il codice nella cache.