Je souhaite savoir pourquoi Amazon Redshift Serverless a annulé ou arrêté ma requête et je reçois un message d'erreur.
Brève description
Les raisons pour lesquelles une requête est annulée ou arrêtée dans Amazon Redshift sont les suivantes :
- Vous avez atteint le quota de requêtes.
- Vous avez atteint le quota d'utilisation des unités de traitement Redshift (RPU) pour le groupe de travail.
- Votre requête a dépassé la valeur de statement_timeout.
- Un autre utilisateur a arrêté ou annulé la requête.
- La connexion réseau présente des problèmes.
Résolution
Vérifier le quota de requêtes du groupe de travail Amazon Redshift Serverless
Lorsque vous atteignez le quota de requêtes du groupe de travail, la requête renvoie le message d'erreur suivant :
« ERROR: Query (6800381) cancelled on user's request. »
Pour confirmer qu'Amazon Redshift a annulé la requête car vous avez atteint le quota, exécutez l'instruction SQL suivante depuis l'éditeur de requêtes Amazon Redshift :
SELECT query_id, query_text, error_message from SYS_QUERY_HISTORY WHERE error_message ILIKE '%cancelled on user%';
Pour résoudre ce problème, augmentez le quota de requêtes de votre groupe de travail.
Vérifier le quota d'utilisation de RPU pour le groupe de travail Amazon Redshift Serverless
Lorsque vous atteignez le quota d'utilisation de RPU pour le groupe de travail, la requête renvoie le message d'erreur suivant :
« Error: Query reached usage limit. »
Pour confirmer qu'Amazon Redshift a annulé la requête car vous avez atteint le quota d'utilisation, exécutez l'instruction SQL suivante depuis l'éditeur de requêtes Amazon Redshift :
SELECT query_id, query_text, usage_limit, error_message FROM SYS_QUERY_HISTORY WHERE error_message ILIKE '%reached usage limit%';
Pour résoudre ce problème, augmentez le quota d'utilisation de votre groupe de travail.
Vérifier si votre requête a dépassé la valeur de statement_timeout
Lorsqu'une requête dépasse la valeur de statement_timeout, Amazon Redshift annule les requêtes que vous soumettez au cours de la session. La requête renvoie le message d'erreur suivant :
« ERROR: Query (150) cancelled on user's request. »
Pour vérifier le délai d'expiration de l'instruction pour votre cluster, exécutez l'instruction SQL suivante depuis l'éditeur de requêtes Amazon Redshift :
SHOW statement_timeout;
L'instruction indique le délai d'expiration de l'instruction au niveau du cluster en millisecondes. Pour modifier la sortie, modifiez les paramètres dans la configuration de gestion de la charge de travail.
Pour confirmer qu'Amazon Redshift a annulé la requête en raison d'un délai d'exécution de l'instruction, exécutez l'instruction SQL suivante depuis l'éditeur de requêtes Amazon Redshift :
SELECT * FROM SYS_QUERY_HISTORY WHERE query_text ILIKE '%set%statement_timeout%to%';
Si Amazon Redshift a annulé votre requête, exécutez la commande suivante pour augmenter la valeur de statement_timeout :
SET statement_timeout = (value)
Remarque : Remplacez (valeur) par une valeur supérieure à la valeur de statement_timeout.
Vérifier si un autre utilisateur a arrêté ou annulé la requête
Pour vérifier si un autre utilisateur a arrêté ou annulé une requête, exécutez la commande suivante et examinez la colonne error_message :
SELECT * FROM sys_query_history WHERE session_id = process_id;
Remarque : Remplacez process_id par votre ID de processus.
Pour afficher les requêtes interrompues, exécutez l'instruction SQL suivante depuis l'éditeur de requêtes Amazon Redshift :
SELECT * FROM sys_query_history WHERE error_message ILIKE '%terminate%';
Pour afficher les requêtes annulées, exécutez l'instruction SQL suivante depuis l'éditeur de requêtes Amazon Redshift :
SELECT * FROM sys_query_history WHERE error_message ILIKE '%canceled by user%';
Si la requête apparaît dans la sortie, cela signifie qu'un utilisateur a arrêté ou annulé la requête.
Remarque : Les utilisateurs ne peuvent arrêter que leur propre session. Un super utilisateur peut arrêter toutes les sessions.
Problèmes liés au réseau
Les problèmes de réseau peuvent également annuler des requêtes.
Pour vérifier s'il existe un problème de connexion réseau, exécutez la commande suivante pour vérifier la vue de surveillance SYS_CONNECTION_LOG :
SELECT * FROM SYS_CONNECTION_LOG WHERE session_id = process_id;
Remarque : Remplacez process_id par votre ID de processus.
Informations connexes
Pourquoi ma requête a-t-elle été annulée dans Amazon Redshift ?