Prestazioni di Amazon RedShift  - Amazon Redshift

Amazon Redshift non supporterà più la creazione di nuovi Python UDFs a partire dalla Patch 198. Python esistente UDFs continuerà a funzionare fino al 30 giugno 2026. Per ulteriori informazioni, consulta il post del blog.

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 di Amazon RedShift 

In questo argomento vengono illustrati i componenti di Amazon Redshift che favoriscono le prestazioni. La comprensione di questi componenti consentirà di ottimizzare le prestazioni e risolvere i problemi di prestazioni scadenti con Amazon Redshift.

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. Per ulteriori informazioni, consulta 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.

Strumento di ottimizzazione 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

Compilazione del codice: Amazon Redshift genera e compila codice ottimizzato per ogni piano di esecuzione delle query. Il codice compilato viene eseguito più velocemente perché elimina le spese di gestione derivanti dall'utilizzo di un interprete. Per ridurre al minimo la latenza per le nuove query preservando al contempo i vantaggi prestazionali del codice compilato, Amazon Redshift utilizza una tecnica chiamata composizione. La composizione genera una disposizione leggera di logica preesistente per elaborare immediatamente nuove query, compilando contemporaneamente codice altamente ottimizzato e specifico per la query in background. Ciò rimuove la compilazione dal percorso critico dell'esecuzione delle query, in modo che le nuove query vengano avviate più rapidamente e offrano prestazioni coerenti con le esecuzioni successive.

Amazon Redshift utilizza anche un servizio di compilazione serverless per scalare le compilazioni di query oltre le risorse di calcolo di un cluster Amazon Redshift. I segmenti di codice compilati vengono memorizzati nella cache sia localmente sul cluster che in una cache remota praticamente illimitata che persiste dopo il riavvio del cluster. Le successive esecuzioni della stessa query possono essere eseguite più rapidamente, in quanto è possibile saltare la fase di compilazione. Utilizzando un servizio di compilazione scalabile, Amazon Redshift compila il codice in parallelo per fornire prestazioni costantemente veloci.