Miglioramento delle prestazioni della query di - 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à.

Miglioramento delle prestazioni della query di

Di seguito vengono riportati problemi comuni che riguardano le prestazioni delle query, con istruzioni su come diagnosticarli e risolverli.

Statistiche della tabella mancanti o scadute

Se le statistiche della tabella sono mancanti o scadute, potresti visualizzare quanto segue:

  • Un messaggio di avviso nei risultati del comando EXPLAIN.

  • Un evento di avviso statistiche mancanti su STL_ALERT_EVENT_LOG. Per ulteriori informazioni, consultare Revisione degli avvisi di query.

Per risolvere questo problema, esegui il comando ANALYZE.

Loop nidificato

Se è presente un loop nidificato, potresti visualizzare un evento di avviso loop nidificato su STL_ALERT_EVENT_LOG. Per identificare questo tipo di evento, puoi anche eseguire la query su Identificazione di query con loop nidificati. Per ulteriori informazioni, consultare Revisione degli avvisi di query.

Per risolvere questo problema, rivedi la tua query per le combinazioni incrociate e rimuovile se possibile. Le combinazioni incrociate sono combinazione senza una condizione di combinazione nel prodotto cartesiano delle due tabelle. Generalmente vengono eseguite come combinazioni di loop nidificati, che sono le più lente tra i tipi di combinazione possibili.

Hash join

Se è presente un hash join, potresti visualizzare quanto segue:

Il problema può essere risolto in diversi modi:

  • Se possibile, riscrivi la query per utilizzare un merge join. Puoi farlo mediante la specificazione di quelle colonne di combinazione che sono sia chiavi di distribuzione che chiavi di ordinamento.

  • Se la fase HJOIN su SVL_QUERY_SUMMARY ha un valore molto alto nel campo relativo alle righe rispetto al valore delle righe nella fase finale RETURN nella query, verifica se puoi riscrivere la query per combinarla su un'unica colonna. Se una query non viene combinata su un'unica colonna, ad esempio una chiave primaria, aumenta il numero di righe coinvolte nella combinazione.

Righe fantasma o righe di cui non è stato eseguito il commit

Se sono presenti righe fantasma o non eseguite, potresti visualizzare un evento di avviso su STL_ALERT_EVENT_LOG che indica l'eccessiva presenza di righe fantasma. Per ulteriori informazioni, consultare Revisione degli avvisi di query.

Il problema può essere risolto in diversi modi:

  • Cercare nella scheda Carichi della console Amazon Redshift le operazioni di carico attive su tutte le tabelle della query. Se visualizzi operazioni di carico attive, attendi il loro completamento prima di intraprendere altre operazioni.

  • Se non ci sono operazioni di carico attive, esegui il comando VACUUM sulle tabelle della query al fine di rimuovere le righe eliminate.

Righe non ordinate o ordinate in modo errato

Se sono presenti delle righe non ordinate o ordinate male, potresti visualizzare un evento di avviso del filtro molto selettivo su STL_ALERT_EVENT_LOG. Per ulteriori informazioni, consultare Revisione degli avvisi di query.

Inoltre, puoi verificare la presenza di grandi aree non ordinate nelle tabelle della tua query, eseguendo la stessa su Identificazione delle tabelle con differenza di dati o con righe non ordinate.

Il problema può essere risolto in diversi modi:

  • Esegui il comando VACUUM sulle tabelle della query per riordinare le righe.

  • Per verificare se è possibile apportare dei miglioramenti, rivedi la chiave di ordinamento sulle tabelle della query. Ricordati di comparare le prestazioni di questa query a quelle di altre query importanti e al sistema globale prima di apportare delle modifiche. Per ulteriori informazioni, consultare Utilizzo delle chiavi di ordinamento.

Distribuzione dei dati non ottimale

Se la distribuzione dei dati non è ottimale, potresti visualizzare quanto segue:

  • Su STL_ALERT_EVENT_LOG apparirà un evento di avviso di una grande trasmissione, distribuzione o un'esecuzione seriale. Per ulteriori informazioni, consultare Revisione degli avvisi di query.

  • Le sezioni non stanno processando approssimativamente lo stesso numero di righe per una fase specifica. Per ulteriori informazioni, consultare Utilizzo della vista SVL_QUERY_REPORT.

  • Le sezioni non stanno impiegando approssimativamente lo stesso tempo per una fase specifica. Per ulteriori informazioni, consultare Utilizzo della vista SVL_QUERY_REPORT.

Se nessuna delle opzioni precedenti è vera, puoi anche verificare se qualche tabella nella tua query presenta una differenza di dati, eseguendo la stessa su Identificazione delle tabelle con differenza di dati o con righe non ordinate.

Per risolvere questo problema, esamina gli stili di distribuzione delle tabelle nella query e determina se è possibile apportare dei miglioramenti. Ricordati di comparare le prestazioni di questa query a quelle di altre query importanti e al sistema globale prima di apportare delle modifiche. Per ulteriori informazioni, consultare Utilizzo degli stili di distribuzione dati.

Memoria insufficiente allocata alla query

Se la memoria allocata alla tua query è insufficiente, potresti visualizzare una fase su SVL_QUERY_SUMMARY che dispone di un valore "true" su is_diskbased. Per ulteriori informazioni, consultare Utilizzo della visualizzazione SVL_QUERY_SUMMARY.

Per risolvere il problema, alloca più memoria alla query aumentando temporaneamente il numero di slot che utilizza la query. La gestione del carico di lavoro (WLM) riserva degli slot in una coda di query equivalente per il livello di simultaneità impostato per la query. Ad esempio, una coda con un livello di simultaneità pari a 5, dispone di 5 slot. La memoria assegnata alla coda viene allocata in parti uguali a ogni slot. L'assegnazione di più slot per una query, le fornisce l'accesso alla memoria di tutti questi slot. Per ulteriori informazioni su come incrementare temporaneamente gli slot di una query, consultare wlm_query_slot_count.

Clausola WHERE non ottimale

Se la tua clausola WHERE causa un'eccessiva scansione della tabella, potresti visualizzare una fase SCAN nel segmento con il valore maxtime più alto su SVL_QUERY_SUMMARY. Per ulteriori informazioni, consultare Utilizzo della visualizzazione SVL_QUERY_SUMMARY.

Per risolvere questo problema, aggiungi una clausola WHERE alla query basata sulla colonna di ordinamento principale della tabella più grande. Grazie a questo approccio, è possibile ridurre al minimo i tempi di scansione. Per ulteriori informazioni, consultare Best practice di Amazon Redshift per la progettazione di tabelle.

Predicato poco restrittivo

Se la tua query dispone di un predicato poco restrittivo, potresti visualizzare una fase SCAN nel segmento con il valore maxtime più alto su SVL_QUERY_SUMMARY, il quale ha un valore rows molto alto rispetto al valore rows nella fase finale RETURN nella query. Per ulteriori informazioni, consultare Utilizzo della visualizzazione SVL_QUERY_SUMMARY.

Per risolvere questo problema. prova ad aggiungere un predicato alla query, oppure rendi il predicato esistente più restrittivo per restringere l'output.

Insieme di risultati molto grande

Se la query restituisce un set di risultati molto ampio, considerare la riscrittura della query per utilizzare UNLOAD e scrivere i risultati in Amazon S3. Questo approccio migliorerà le prestazioni della fase RETURN, traendo vantaggio dall'elaborazione parallela. Per ulteriori informazioni sulla verifica di un insieme di risultati molto grande, consultare Utilizzo della visualizzazione SVL_QUERY_SUMMARY.

Elenco SELECT grande

Se la tua query dispone di un elenco SELECT insolitamente grande, potresti visualizzare un valore bytes più alto rispetto al valore rows di tutte le fasi (in relazione alle altre fasi) su SVL_QUERY_SUMMARY. Questo valore bytes alto può indicare che stai selezionando molte colonne. Per ulteriori informazioni, consultare Utilizzo della visualizzazione SVL_QUERY_SUMMARY.

Per risolvere questo problema, rivedi le colonne che stai selezionando e verifica se puoi rimuoverne qualcuna.