Perché la mia richiesta è stata annullata in Amazon Redshift?

6 minuti di lettura
0

La mia richiesta in Amazon Redshift è stata annullata con un messaggio di errore.

Breve descrizione

Una richiesta può essere annullata in Amazon Redshift per i seguenti motivi:

  • Configurazione delle regole di monitoraggio delle query di Amazon Redshift Workload Management (WLM)
  • Valore di timeout dell'istruzione
  • INTERROMPERE, ANNULLARE o TERMINARE le richieste
  • Problemi di rete
  • Aggiornamenti di manutenzione del cluster
  • Errori di elaborazione interni
  • Errori ASSERT

Per evitare che la tua richiesta venga interrotta, completa i seguenti passaggi:

Risoluzione

Configurazione delle regole di monitoraggio delle query WLM di Amazon Redshift

Crea regole di monitoraggio delle query WLM (QMR) per definire limiti prestazionali basati su metriche per le tue code. Oppure, specifica le azioni intraprese da Amazon Redshift quando una query supera i limiti di tempo WLM. Ad esempio, crea una regola che annulli le query eseguite per più di una soglia di 60 secondi.

Esempio 1: azione di interruzione specificata nella regola di monitoraggio delle query

Se una query viene annullata a causa dell'azione di interruzione specificata in una regola di monitoraggio delle query, la query restituisce il seguente errore:

"ERROR: Query (500029) cancelled by WLM abort action of Query Monitoring Rule "testrule"."

Per sapere se una query è stata annullata a causa di un'azione di "interruzione", esegui la seguente query:

select * from STL_WLM_RULE_ACTION where action = 'abort';

L'output della query elenca tutte le query annullate dall'azione "interrompi". Se l'ID della tua query è elencato nell'output, aumenta il limite di tempo nel parametro WLM QMR.

Esempio 2: nessuna coda disponibile per l'interrogazione da saltare

Una query può essere saltata se l'azione "hop" è specificata nella regola di monitoraggio della query. Quando una query viene saltata, WLM tenta di indirizzarla alla successiva coda corrispondente in base alle regole di assegnazione delle code WLM. Se la query non corrisponde a una definizione di coda, viene annullata. Una query annullata non viene riassegnata alla coda predefinita. Per maggiori informazioni, vedi Proprietà del parametro wlm_json_configuration.

Nota: è possibile saltare le interrogazioni solo in una configurazione WLM manuale.

Se una query viene saltata ma non sono disponibili code corrispondenti, la query annullata restituisce il seguente messaggio di errore:

"ERROR: Query (500104) canceled on user's request and ran out of wlm queues for restart."

Se la tua richiesta viene annullata con questo messaggio di errore, esegui la seguente query per controllare le code definite dall'utente:

select * from stl_wlm_query where query=<query-id>;

Nel tuo output, le voci service_class 6-13 includono le code definite dall'utente. Ad esempio, la service_class 6 potrebbe elencare la Queue1 nella configurazione WLM, mentre la service_class 7 potrebbe elencare la Queue2.

Esegui la seguente query per ottenere maggiori informazioni sulla mappatura tra service_class e queue:

select * from stv_wlm_service_class_config where service_class>5;

Dopo aver ottenuto le informazioni sulla mappatura della coda, controlla la configurazione WLM dalla console Amazon Redshift. Verifica che le code corrispondano alla configurazione WLM. È possibile saltare una query solo se è disponibile una coda corrispondente per la configurazione del gruppo di utenti o del gruppo di query. Per maggiori informazioni, vedere WLM query queue hopping.

Valore di timeout dell'istruzione

Il valore statement_timeout è il tempo massimo di esecuzione di una query prima che Amazon Redshift la termini. Quando viene superato il timeout di un'istruzione, le query inviate durante la sessione vengono annullate con il seguente messaggio di errore:

"ERRORE: Query (150) annullata su richiesta dell'utente"

Per verificare se una query è stata annullata a causa del timeout di un'istruzione, esegui la seguente query:

select * from SVL_STATEMENTTEXT where text ilike '%set%statement_timeout%to%' and pid in (select pid from STL_QUERY where query = <queryid>);

I timeout delle istruzioni possono essere impostati anche nel gruppo di parametri del cluster. Controlla il gruppo di parametri del cluster e tutte le impostazioni di configurazione dell'istruzione\ _timeout per ulteriori conferme. Per ulteriori informazioni, vedere Modifica di un gruppo di parametri.

INTERROMPERE, ANNULLARE o TERMINARE le richieste

Per verificare se una determinata query è stata interrotta o annullata da un utente (ad esempio un superutente), esegui la seguente query con il tuo ID di query:

select * from SVL_STATEMENTTEXT where text ilike '%cancel%' and xid
    in (select xid from STL_QUERY where query = <queryid>);
select * from SVL_STATEMENTTEXT where text ilike '%abort%' and xid in (select xid from STL_QUERY where query = <queryid>);

Se la query viene visualizzata nell'output, la query è stata interrotta o annullata su richiesta dell'utente.

Nota: gli utenti possono terminare solo la propria sessione. Un superutente può terminare tutte le sessioni.

Le query possono anche essere interrotte quando un utente annulla o termina un processo corrispondente (in cui viene eseguita la query). Di seguito sono riportati alcuni esempi di processi che possono annullare o terminare una query:

Quando un processo viene annullato o terminato da questi comandi, viene registrata una voce in SVL_TERMINATE. Per verificare se una query è stata interrotta perché una sessione è stata interrotta, controlla i log SVL_TERMINATE. Esegui la seguente query per controllare i log SVL_TERMINATE:

select * from SVL_TERMINATE where pid=(select pid from STL_QUERY where query=500534);

Problemi di rete

A volte le query vengono annullate a causa di problemi di rete sottostanti. Per verificare se i problemi di rete causano l'annullamento della query, esegui la seguente query per controllare le voci STL_CONNECTION_LOG:

select * from STL_CONNECTION_LOG where pid in (select pid from STL_QUERY where query = <query_id>);

Lo STL_CONNECTION_LOG registra i tentativi di autenticazione e le connessioni o disconnessioni di rete. Se la query viene visualizzata nell'output, è possibile che un problema di connessione di rete ne causi l'annullamento.

Aggiornamenti di manutenzione del cluster

Se si verifica una manutenzione pianificata durante l'esecuzione di una query, la query viene interrotta e ripristinata, richiedendo il riavvio del cluster. Pianifica operazioni di lunga durata (come carichi di dati di grandi dimensioni o l'operazione VACUUM) per evitare finestre di manutenzione. Per ulteriori informazioni, vedere Pianificazione delle finestre di manutenzione.

Per verificare se è stata eseguita la manutenzione sul tuo cluster Amazon Redshift, scegli la scheda Eventi nella tua console Amazon Redshift.

Errori di elaborazione interni

La tabella STL_ERROR registra gli errori di elaborazione interni generati da Amazon Redshift. La tabella STL_ERROR non registra errori o messaggi SQL.

Per verificare se la tua richiesta è stata annullata da un errore interno, esegui la seguente query per controllare le voci STL_ERROR:

select * from STL_ERROR where userid=<user id>;

Errori ASSERT

A volte le interrogazioni vengono interrotte a causa di un errore ASSERT. L'errore ASSERT può verificarsi quando c'è un problema con la query stessa. Se ricevi un errore ASSERT dopo l'aggiornamento di una patch, aggiorna Amazon Redshift alla versione più recente del cluster. Quindi, controlla la cronologia delle versioni del cluster. In alternativa, puoi ripristinare la versione del cluster.

AWS UFFICIALE
AWS UFFICIALEAggiornata 10 mesi fa