Skip to main content
Cette page décrit les instructions KILL QUERY et KILL MUTATION. Par défaut, une correspondance vide se termine sans lever d’exception. Pour que KILL QUERY lève une exception lorsque son expression WHERE ne laisse aucune ligne éligible dans system.processes une fois l’instruction KILL en cours exclue, et que KILL MUTATION lève une exception lorsque son expression WHERE ne correspond à aucune ligne de system.mutations, définissez le paramètre kill_throw_if_noop sur true. L’exécution avec ON CLUSTER ne lève pas d’exception en cas de correspondance vide, car les résultats de correspondance ne sont pas agrégés entre les hôtes.

KILL QUERY

Tente de terminer de force les requêtes en cours d’exécution. Les requêtes à arrêter sont sélectionnées dans la table system.processes à l’aide des critères définis dans la clause WHERE de la requête KILL. Exemples : Tout d’abord, vous devez obtenir la liste des requêtes inachevées. Cette requête SQL les renvoie en les classant selon leur durée d’exécution : Liste à partir d’un seul nœud ClickHouse :
Lister à partir d’un cluster ClickHouse :
Interrompez la requête :
Si vous interrompez une requête dans ClickHouse Cloud ou dans un cluster autogéré, veillez à utiliser l’option ON CLUSTER [cluster-name] afin de garantir que la requête est interrompue sur toutes les répliques
Les utilisateurs en lecture seule ne peuvent arrêter que leurs propres requêtes. Un utilisateur qui ne dispose pas du privilège SELECT sur system.processes peut néanmoins annuler sa propre requête en indiquant son identifiant : KILL QUERY WHERE query_id = '<id>'. Pour un utilisateur qui ne dispose ni de ce privilège ni de KILL QUERY, un identifiant correspondant à une requête qui ne s’exécute pas sous son compte n’annule aucune requête et ne renvoie aucune ligne, sans signaler d’erreur, sauf si kill_throw_if_noop est activé, auquel cas l’absence d’effet est signalée par une exception ; un utilisateur qui dispose de KILL QUERY mais pas de ce privilège SELECT voit sa requête refusée faute de privilège SELECT. Toute autre condition WHERE, ainsi que ON CLUSTER, nécessitent toujours les privilèges décrits ci-dessus. Par défaut, la version asynchrone des requêtes (ASYNC) est utilisée et n’attend pas la confirmation de leur arrêt. La version synchrone (SYNC) attend l’arrêt de toutes les requêtes et affiche des informations sur chaque processus à mesure qu’il s’arrête. La réponse contient la colonne kill_status, qui peut prendre les valeurs suivantes :
  1. finished – La requête a été interrompue avec succès.
  2. waiting – En attente de la fin de la requête après l’envoi d’un signal d’arrêt.
  3. Les autres valeurs expliquent pourquoi la requête ne peut pas être arrêtée.
Une requête de test (TEST) vérifie uniquement les droits de l’utilisateur et affiche la liste des requêtes à arrêter.

KILL MUTATION

La présence de mutations longues ou de mutations incomplètes indique souvent qu’un service ClickHouse fonctionne mal. La nature asynchrone des mutations peut les amener à consommer toutes les ressources disponibles du système. Vous devrez peut-être soit :
  • Suspendre toutes les nouvelles mutations, les INSERT et les SELECT, puis laisser la file d’attente des mutations se résorber.
  • Ou interrompre manuellement certaines de ces mutations en envoyant une commande KILL.
Tente d’annuler et de supprimer les mutations en cours d’exécution. Les mutations à annuler sont sélectionnées dans la table system.mutations à l’aide du filtre spécifié par la clause WHERE de la requête KILL. Une requête de test (TEST) vérifie uniquement les droits de l’utilisateur et affiche la liste des mutations à arrêter. Exemples : Obtenir le count() du nombre de mutations incomplètes : Nombre de mutations sur un seul nœud ClickHouse :
Nombre de mutations d’un cluster de répliques ClickHouse :
Consultez la liste des mutations incomplètes : Liste des mutations pour un seul nœud ClickHouse :
Liste des mutations d’un cluster ClickHouse :
Interrompez les mutations au besoin :
La requête est utile lorsqu’une mutation est bloquée et ne peut pas aboutir (par ex. si une fonction de la requête de mutation génère une exception lorsqu’elle est appliquée aux données contenues dans la table). Les modifications déjà effectuées par la mutation ne sont pas annulées.
La colonne is_killed=1 (ClickHouse Cloud uniquement) dans la table system.mutations ne signifie pas nécessairement que la mutation est complètement terminée. Il est possible qu’une mutation reste pendant une longue période dans un état où is_killed=1 et is_done=0. Cela peut se produire si une autre mutation de longue durée bloque la mutation interrompue. Il s’agit d’une situation normale.