Utilizzo delle chiavi di ordinamento - 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à.

Utilizzo delle chiavi di ordinamento

Nota

È consigliabile creare le tabelle con SORTKEY AUTO. In tal caso, Amazon Redshift utilizza l'ottimizzazione automatica della tabella per scegliere la chiave di ordinamento. Per ulteriori informazioni, consultare Utilizzo dell'ottimizzazione automatica delle tabelle. I dettagli sull'ordinamento sono descritti in dettaglio nella parte restante di questa sezione.

Quando si crea una tabella, è possibile definire una o più delle sue colonne come chiavi di ordinamento. Quando i dati vengono caricati inizialmente nella tabella vuota, le righe vengono archiviate sul disco in modo ordinato. Le informazioni sulle colonne della chiave di ordinamento vengono passate al pianificatore di query, che utilizza questa informazioni per costruire piani che tengano in considerazione il modo in cui sono ordinati i dati. Per ulteriori informazioni, consulta CREATE TABLE. Per informazioni sulle best practice per la creazione di una chiave di ordinamento, consulta Scelta della migliore chiave di ordinamento.

L'ordinamento consente una gestione efficiente dei predicati a intervallo limitato. Amazon Redshift archivia i dati colonnari nei blocchi del disco da 1 MB. I valori minimo e massimo di ogni blocco vengono archiviati come parte dei metadati. Se una query utilizza un predicato a intervallo limitato, il processore di query può utilizzare i valori minimo e massimo per saltare rapidamente grandi numeri di blocchi durante la scansione della tabella. Ad esempio, si supponga che una tabella memorizzi cinque anni di dati ordinati per data e che una query specifichi un intervallo di un mese. In questo caso, puoi eliminare fino al 98% dei blocchi del disco dalla scansione. Se i dati non sono ordinati, dovranno essere scansionati più blocchi del disco (probabilmente tutti).

È possibile specificare la chiave di ordinamento composto o interlacciato. Una chiave di ordinamento composta è più efficiente quando i predicati di query utilizzano un prefisso, ovvero un sottoinsieme delle colonne della chiave di ordinamento in ordine. Una chiave di ordinamento interlacciato dà lo stesso peso a ogni colonna nella chiave di ordinamento, quindi i predicato di query possono utilizzare qualsiasi sottoinsieme di colonne che costituiscono la chiave di ordinamento, in qualsiasi ordine.

Per comprendere l'impatto sulle prestazioni della query della chiave di ordinamento scelta, utilizza il comando EXPLAIN. Per ulteriori informazioni, consultare Pianificazione di query e flusso di lavoro di esecuzione.

Per definire un tipo di ordinamento, utilizza la parola chiave INTERLEAVED o COMPOUND con le tue dichiarazioni CREATE TABLE o CREATE TABLE AS. L'impostazione predefinita è COMPOUND. COMPOUND è consigliata quando aggiorni regolarmente le tabelle con le operazioni INSERT, UPDATE o DELETE. Una chiave di ordinamento INTERLEAVED può utilizzare un massimo di otto colonne. A seconda delle dimensioni di dati e cluster, VACUUM REINDEX può impiegare molto più tempo rispetto a VACUUM FULL perché esegue un ulteriore passaggio per analizzare le chiavi di ordinamento interlacciate. L'operazione di ordinamento e unione può richiedere più tempo per le tabelle interlacciate perché l'ordinamento interlacciato potrebbe dover riordinare più righe rispetto a un ordinamento composto.

Per visualizzare le chiavi di ordinamento per una tabella, eseguire la query della vista di sistema SVV_TABLE_INFO .

Ordinamento del layout dei dati multidimensionali (anteprima)

Questa è una documentazione di pre-rilascio per l'ordinamento delle tabelle con layout di dati multidimensionali, disponibile nella versione di anteprima. La documentazione e la funzionalità sono soggette a modifiche. Consigliamo di utilizzare questa funzione solo con cluster di test e non in ambienti di produzione. Per i termini e le condizioni di anteprima, vedere Partecipazione al servizio beta in Termini del servizio AWS.
Nota

Questa funzionalità è disponibile solo in un cluster o un gruppo di lavoro di anteprima. Per creare un cluster di anteprima, consulta Creazione di un cluster di anteprima nella Guida alla gestione di Amazon Redshift. Per creare un gruppo di lavoro di anteprima, consulta Creazione di un gruppo di lavoro di anteprima nella Guida alla gestione di Amazon Redshift.

Una chiave di ordinamento del layout di dati multidimensionali è una chiave di ordinamento di tipo AUTO basato su predicati ripetitivi presenti in un carico di lavoro. Se il carico di lavoro contiene predicati ripetitivi, Amazon Redshift può migliorare le prestazioni di scansione delle tabelle eseguendo la co-locazione delle righe di dati che soddisfano i predicati ripetitivi. Anziché archiviare i dati di una tabella in un rigoroso ordine di colonne, una chiave di ordinamento del layout dei dati multidimensionale memorizza i dati analizzando i predicati ripetitivi presenti in un carico di lavoro. In un carico di lavoro è possibile trovare più di un predicato ripetitivo. A seconda del carico di lavoro, questo tipo di chiave di ordinamento può migliorare le prestazioni di molti predicati. Amazon Redshift determina automaticamente se questo metodo della chiave di ordinamento deve essere utilizzato per le tabelle definite con una chiave di ordinamento AUTO.

Ad esempio, supponi di disporre di una tabella con i dati ordinati in base alle colonne. Potrebbe essere necessario esaminare molti blocchi di dati per determinare se soddisfano i predicati del carico di lavoro. Tuttavia, se i dati sono archiviati su disco nell'ordine dei predicati, è necessario scansionare un numero inferiore di blocchi per soddisfare la query. In questo caso è utile utilizzare una chiave di ordinamento del layout dei dati multidimensionali.

Per vedere se una query utilizza una chiave del layout dei dati multidimensionali, consulta la colonna step_attribute della vista SYS_QUERY_DETAIL. Quando il valore è multi-dimensional, per la query è stato utilizzato un layout di dati multidimensionali. Per vedere se una tabella definita con la chiave di ordinamento AUTO utilizza un layout di dati multidimensionali, consulta la colonna sortkey1 della vista SVV_TABLE_INFO. Quando il valore è padb_internal_mddl_key_col, per la chiave di ordinamento della tabella è stato utilizzato il layout dei dati multidimensionali.

Per evitare che Amazon Redshift utilizzi una chiave di ordinamento per il layout dei dati multidimensionali, scegli un'opzione di ordinamento della tabella diversa da SORTKEY AUTO. Per ulteriori informazioni sulle opzioni SORTKEY, consulta CREATE TABLE.

Chiave di ordinamento composta

Una chiave composta è costituita da tutte le colonne elencate nella definizione della chiave di ordinamento, nell'ordine in cui sono elencate. Una chiave di ordinamento composta è più utile quando un filtro di query applica delle condizioni, come filtri e combinazioni, che utilizzano un prefisso delle chiavi di ordinamento. I vantaggi in termini di prestazioni dell'ordinamento composto diminuiscono quando le query si basano solo su colonne di ordinamento secondarie, senza fare riferimento alle colonne primarie. COMPOUND è il tipo di ordinamento predefinito.

Le chiavi di ordinamento composte potrebbero velocizzare le combinazioni, le operazioni GROUP BY e ORDER BY e le funzioni di finestra che utilizzano PARTITION BY e ORDER BY. Ad esempio, un merge join, che è sempre più veloce di un hash join, è conveniente quando i dati vengono distribuiti e preordinati sulle colonne di combinazione. Le chiavi di ordinamento composte aiutano anche a migliorare la compressione.

Quando aggiungi righe a una tabella ordinata che già contiene dati, la regione non ordinata cresce; questo ha degli effetti importanti sulle prestazioni. L'effetto è maggiore quando la tabella utilizza ordinamento interlacciato, soprattutto quando le colonne di ordinamento includono dati che aumentano in maniera monotona, come le colonne di dati o timestamp. Esegui regolarmente un'operazione VACUUM, soprattutto dopo aver caricato grandi quantità di dati, per ordinare e analizzare nuovamente i dati. Per ulteriori informazioni, consulta Gestione delle dimensioni della regione non ordinata. Dopo il vacuum per riordinare i dati, è buona norma eseguire un comando ANALYZE per aggiornare i metadati statistici per il pianificatore di query. Per ulteriori informazioni, consultare Analisi delle tabelle.

Chiave di ordinamento interlacciato

Un ordinamento interlacciato dà lo stesso peso a ogni colonna, o sottoinsieme di colonne, nella chiave di ordinamento. Se più query utilizzano colonne diverse per i filtri, puoi spesso migliorare le prestazioni di quelle query tramite uno stile di ordinamento interlacciato. Quando una query utilizza predicati restrittivi sulle colonne di ordinamento secondarie, l'ordinamento interlacciato migliora in modo significativo le prestazioni delle query rispetto all'ordinamento composto.

Importante

Non utilizzare una chiave di ordinamento "interlacciato" su colonne con attributi che crescono in maniera monotona, come colonne di identità, date o timestamp.

I miglioramenti delle prestazioni che hai ottenuto implementando una chiave di ordinamento interlacciato, dovrebbero essere confrontati con i tempi di caricamento e di vacuum.

Gli ordinamenti interlacciati sono più efficaci con query molto selettive, che filtrano su una o più colonne di ordinamento nella clausola WHERE, ad esempio select c_name from customer where c_region = 'ASIA'. I benefici dell'ordinamento interlacciato aumenta con il numero delle colonne ordinate che vengono limitate.

Un ordinamento interlacciato è più efficace con le tabelle grandi. L'ordinamento viene applicato su ogni sezione. Di conseguenza, un ordinamento interlacciato è più efficace quando una tabella è abbastanza grande da richiedere più blocchi da 1 MB per sezione. Qui, il processore di query può saltare una percentuale significativa dei blocchi utilizzando predicati restrittivi. Per visualizzare il numero di blocchi che utilizza una tabella, eseguire la query della vista di sistema STV_BLOCKLIST.

Quando si esegue un ordinamento su una singola colonna, un ordinamento interlacciato fornisce prestazioni migliori rispetto a un ordinamento composto, nel caso in cui i valori della colonna abbiano un prefisso lungo in comune. Ad esempio, di solito le URL cominciano con "http://www". Le chiavi di ordinamento composto utilizzano un numero limitati di caratteri dal prefisso, che comporta molte duplicazioni delle chiavi. Gli ordinamenti interlacciati utilizzano uno schema di compressione interno per i valori della mappa di zona, i quali gli consentono di discriminare meglio i valori delle colonne che dispongono di un prefisso lungo in comune.

Quando si migrano cluster con provisioning di Amazon Redshift ad Amazon Redshift Serverless, Redshift converte le tabelle con chiavi di ordinamento interlacciate e DISTSTYLE KEY in chiavi di ordinamento composte. DISTSTYLE non cambia. Per ulteriori informazioni sugli stili di distribuzione, consulta Utilizzo degli stili di distribuzione dati.

VACUUM REINDEX

Quando aggiungi righe a una tabella ordinata che già contiene dati, le prestazioni possono diminuire nel tempo. Questa diminuzione riguarda sia gli ordinamenti composti che quelli interlacciati, ma ha degli effetti più significativi sulle tabelle interlacciate. Un VACUUM ripristina l'ordine, ma l'operazione può impiegare più tempo per le tabelle interlacciate, perché l'unione di nuovi dati interlacciati può causare modifiche ad ogni blocco di dati.

Quando le tabelle vengono caricate inizialmente, Amazon Redshift analizza la distribuzione dei valori nelle colonne della chiave di ordinamento e utilizza queste informazioni per un ordinamento interlacciato ottimale delle colonne della chiave di ordinamento. Quando una tabella cresce, la distribuzione dei valori nelle colonne della chiave di ordinamento può cambiare o differenziarsi, in particolar modo con le colonne timestamp o di dati. Se la differenza diventa troppo ampia, le prestazioni potrebbero risentirne. Per analizzare nuovamente le chiavi di ordinamento e per ripristinare le prestazioni, esegui il comando VACUUM con la parola chiave REINDEX. Dato che è necessaria un'ulteriore analisi da passare sui dati, VACUUM REINDEX può impiegare più tempo rispetto al VACUUM standard per le tabelle interlacciate. Per visualizzare le informazioni sulla differenza della distribuzione della chiave e sull'ultimo tempo di reindicizzazione, eseguire una query della vista di sistema SVV_INTERLEAVED_COLUMNS.

Per ulteriori informazioni su come determinare la frequenza dell'esecuzione di VACUUM e quando eseguire VACUUM REINDEX, consultare Decisione sulla reindicizzazione.