Existem dois tipos de instruções KILL: para encerrar uma consulta e uma mutação
KILL QUERY [ON CLUSTER cluster]
WHERE <where expression to SELECT FROM system.processes query>
[SYNC|ASYNC|TEST]
[FORMAT format]
Tenta encerrar à força as consultas que estão em execução no momento.
As consultas a serem encerradas são selecionadas na tabela system.processes usando os critérios definidos na cláusula WHERE da consulta KILL.
Exemplos:
Primeiro, você precisará obter a lista de consultas incompletas. Esta consulta SQL as retorna em ordem das que estão em execução há mais tempo:
Lista de um único nó do ClickHouse:
SELECT
initial_query_id,
query_id,
formatReadableTimeDelta(elapsed) AS time_delta,
query,
*
FROM system.processes
WHERE query ILIKE 'SELECT%'
ORDER BY time_delta DESC;
Lista de um cluster do ClickHouse:
SELECT
initial_query_id,
query_id,
formatReadableTimeDelta(elapsed) AS time_delta,
query,
*
FROM clusterAllReplicas(default, system.processes)
WHERE query ILIKE 'SELECT%'
ORDER BY time_delta DESC;
Interrompa a consulta:
-- Encerra forçosamente todas as consultas com o query_id especificado:
KILL QUERY WHERE query_id='2-857d-4a57-9ee0-327da5d60a90'
-- Encerra de forma síncrona todas as consultas executadas pelo 'username':
KILL QUERY WHERE user='username' SYNC
Se você estiver interrompendo uma consulta no ClickHouse Cloud ou em um cluster autogerenciado, use a opção ON CLUSTER [cluster-name] para garantir que a consulta seja interrompida em todas as réplicas
Usuários com acesso somente leitura só podem interromper as próprias consultas.
Por padrão, é usada a versão assíncrona das consultas (ASYNC), que não espera a confirmação de que as consultas foram interrompidas.
A versão síncrona (SYNC) aguarda a interrupção de todas as consultas e exibe informações sobre cada processo à medida que ele é interrompido.
A resposta contém a coluna kill_status, que pode assumir os seguintes valores:
finished – A consulta foi encerrada com sucesso.
waiting – Aguardando a consulta terminar após o envio de um sinal para encerrá-la.
- Os outros valores explicam por que a consulta não pode ser interrompida.
Uma consulta de teste (TEST) apenas verifica as permissões do usuário e exibe uma lista de consultas a serem interrompidas.
A presença de mutações longas ou incompletas geralmente indica que um serviço do ClickHouse está com baixo desempenho. A natureza assíncrona das mutações pode fazer com que elas consumam todos os recursos disponíveis de um sistema. Pode ser necessário:
- Pausar todas as novas mutações,
INSERTs e SELECTs e aguardar a conclusão da fila de mutações.
- Ou encerrar manualmente algumas dessas mutações enviando um comando
KILL.
KILL MUTATION
WHERE <where expression to SELECT FROM system.mutations query>
[TEST]
[FORMAT format]
Tenta cancelar e remover mutações que estão em execução no momento. As mutações a cancelar são selecionadas na tabela system.mutations usando o filtro especificado pela cláusula WHERE da consulta KILL.
Uma consulta de teste (TEST) apenas verifica as permissões do usuário e exibe uma lista das mutações a serem interrompidas.
Exemplos:
Obtenha a count() de mutações incompletas:
Contagem de mutações em um único nó do ClickHouse:
SELECT count(*)
FROM system.mutations
WHERE is_done = 0;
Número de mutações em um cluster de réplicas do ClickHouse:
SELECT count(*)
FROM clusterAllReplicas('default', system.mutations)
WHERE is_done = 0;
Consulte a lista de mutações pendentes:
Lista de mutações de um único nó do ClickHouse:
SELECT mutation_id, *
FROM system.mutations
WHERE is_done = 0;
Lista de mutações de um cluster do ClickHouse:
SELECT mutation_id, *
FROM clusterAllReplicas('default', system.mutations)
WHERE is_done = 0;
Cancele as mutações conforme necessário:
-- Cancele e remova todas as mutações da tabela:
KILL MUTATION WHERE database = 'default' AND table = 'table'
-- Cancele a mutação específica:
KILL MUTATION WHERE database = 'default' AND table = 'table' AND mutation_id = 'mutation_3.txt'
A consulta é útil quando uma mutação fica travada e não consegue ser concluída (por exemplo, se alguma função na consulta da mutação lança uma exceção ao ser aplicada aos dados contidos na tabela).
As alterações já feitas pela mutação não são revertidas.
A coluna is_killed=1 (apenas no ClickHouse Cloud) na tabela system.mutations não significa necessariamente que a mutação tenha sido completamente finalizada. É possível que uma mutação permaneça por um longo período em um estado em que is_killed=1 e is_done=0. Isso pode acontecer se outra mutação de longa duração estiver bloqueando a mutação interrompida. Essa é uma situação normal.