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.
Annuler une requête
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 de la SALES
table et de la USERS
table et joint les deux tables en faisant correspondre SELLERID et USERID dans la WHERE clause.
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 que vous oubliez d'insérer la WHERE clause.
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 CANCEL commande 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 d'annulation 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 RECENTS table STV _, 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 TRIM fonction pour réduire les espaces de fin 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'SELECTinstruction 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 CANCEL commande n'arrête pas une transaction. Pour arrêter ou annuler une transaction, utilisez la ROLLBACK commande ABORT or. 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 ROLLBACK commande ABORT ou pour annuler la transaction et annuler toute modification apportée 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.
Pour plus d'informations sur l'annulation d'une requête, consultez CANCELle manuel Amazon Redshift Database Developer Guide.
Annuler une requête à l’aide de la file d’attente super-utilisateur
Si trop de requêtes s'exécutent simultanément dans votre session en cours, il se peut que vous ne puissiez pas exécuter la CANCEL commande tant qu'une autre requête n'est pas terminée. Dans ce cas, exécutez la CANCEL commande à l'aide d'une autre file de requêtes de gestion de 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 des superutilisateurs, connectez-vous à un superutilisateur et définissez le groupe de requêtes sur « superutilisateur » à l'aide de la commande. SET Après avoir exécuté vos commandes, réinitialisez le groupe de requêtes à l'aide de la RESET commande.
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;