Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Si vous exécutez une requête trop longue ou consommant trop de ressources, annulez-la. Par exemple, vous créez une liste de vendeurs de billets comprenant le nom du vendeur et la quantité de billets vendus. La requête suivante sélectionne les données des tables SALES
et USERS
, et joint les deux tables en associant SELLERID et USERID dans la clause WHERE.
SELECT sellerid, firstname, lastname, sum(qtysold)
FROM sales, users
WHERE sales.sellerid = users.userid
GROUP BY sellerid, firstname, lastname
ORDER BY 4 desc;
Le résultat ressemble à ce qui suit.
sellerid | firstname | lastname | sum
----------+-----------+----------+------
48950 | Nayda | Hood | 184
19123 | Scott | Simmons | 164
20029 | Drew | Mcguire | 164
36791 | Emerson | Delacruz | 160
13567 | Imani | Adams | 156
9697 | Dorian | Ray | 156
41579 | Harrison | Durham | 156
15591 | Phyllis | Clay | 152
3008 | Lucas | Stanley | 148
44956 | Rachel |Villarreal| 148
Note
Il s’agit d’une requête complexe. Pour ce didacticiel, vous n’avez pas à vous préoccuper de la façon dont la requête est construite.
La requête précédente s’exécute en quelques secondes et retourne 2 102 lignes.
Supposons vous oubliez de placer la clause WHERE.
SELECT sellerid, firstname, lastname, sum(qtysold)
FROM sales, users
GROUP BY sellerid, firstname, lastname
ORDER BY 4 desc;
L’ensemble de résultats contient le nombre de toutes les lignes de la table SALES
multiplié par le nombre de toutes les lignes de la table USERS
(49989 * 3766). Cette jointure est appelée jointure cartésienne et n’est pas recommandée. Le résultat est supérieur à 188 millions de lignes et son exécution prend beaucoup de temps.
Pour annuler une requête en cours, utilisez la commande CANCEL avec l'ID de session de la requête. Avec l'éditeur de requêtes Amazon Redshift v2, vous pouvez annuler une requête en cliquant sur le bouton Annuler pendant que la requête est en cours d'exécution.
Pour trouver l'ID de session, démarrez une nouvelle session et interrogez la table STV_RECENTS, comme indiqué à l'étape précédente. L’exemple suivant montre comment vous pouvez rendre les résultats plus lisibles. Pour ce faire, utilisez la fonction TRIM pour couper les espaces de fin de ligne et n’afficher que les 20 premiers caractères de la chaîne de requête.
Pour déterminer l'ID de session d'une requête en cours d'exécution, exécutez l'instruction SELECT suivante.
SELECT user_id, session_id, start_time, query_text
FROM sys_query_history
WHERE status='running';
Le résultat ressemble à ce qui suit.
user_id | session_id | start_time | query_text
---------+---------------+----------------------------+----------------------------------------------------------------
100 | 1073791534 | 2024-03-19 22:26:21.205739 | SELECT user_id, session_id, start_time, query_text FROM ...
Pour annuler la requête avec l'ID de session1073791534
, exécutez la commande suivante.
CANCEL 1073791534;
Note
La commande CANCEL n’arrête pas une transaction. Pour arrêter ou restaurer une transaction, utilisez la commande ABORT ou ROLLBACK. Pour annuler une requête associée à une transaction, annulez d’abord la requête, puis arrêtez la transaction.
Si la requête que vous avez annulée est associée à une transaction, utilisez la commande ABORT ou ROLLBACK. pour annuler la transaction et ignorer toutes les modifications apportées aux données :
ABORT;
Sauf si vous êtes connecté comme super-utilisateur, vous pouvez annuler uniquement vos propres requêtes. Un super-utilisateur peut annuler toutes les requêtes.
Si votre outil de requête ne prend pas en charge l’exécution simultanée de requêtes, démarrez une nouvelle séance pour annuler la requête.
Annuler une requête à l’aide de la file d’attente super-utilisateur
Si votre séance en cours a un trop grand nombre de requêtes s’exécutant en même temps, il se peut que vous ne soyez pas en mesure d’exécuter la commande CANCEL tant qu’une autre requête n’est pas terminée. Dans ce cas, exécutez la commande CANCEL en utilisant une autre file d’attente de requêtes de gestion de la charge de travail.
La gestion de la charge de travail vous permet d’exécuter les requêtes dans différentes files d’attente de afin que vous n’ayez pas besoin d’attendre qu’une autre requête se termine. Le gestionnaire de la charge de travail crée une file d’attente distincte, appelée file d’attente super-utilisateur, que vous pouvez utiliser à des fins de dépannage. Pour utiliser la file d’attente super-utilisateur, connectez-vous en tant que super-utilisateur et définissez le groupe de requêtes avec la valeur « superuser » à l’aide de la commande SET. Après l’exécution de vos commandes, réinitialisez le groupe de requêtes à l’aide de la commande RESET.
Pour annuler une requête à l'aide de la file d'attente des superutilisateurs, exécutez ces commandes.
SET query_group TO 'superuser';
CANCEL 1073791534;
RESET query_group;