Hay dos tipos de sentencias KILL: una para finalizar una consulta y otra para finalizar una mutación
KILL QUERY [ON CLUSTER cluster]
WHERE <where expression to SELECT FROM system.processes query>
[SYNC|ASYNC|TEST]
[FORMAT format]
Intenta finalizar por la fuerza las consultas que se están ejecutando actualmente.
Las consultas que se van a finalizar se seleccionan de la tabla system.processes mediante los criterios definidos en la cláusula WHERE de la consulta KILL.
Ejemplos:
Primero, tendrás que obtener la lista de consultas incompletas. Esta consulta SQL las muestra empezando por las que llevan más tiempo en ejecución:
Lista de un solo nodo de 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;
Listado de un clúster de 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;
Cancele la consulta:
-- Termina forzosamente todas las consultas con el query_id especificado:
KILL QUERY WHERE query_id='2-857d-4a57-9ee0-327da5d60a90'
-- Termina de forma síncrona todas las consultas ejecutadas por 'username':
KILL QUERY WHERE user='username' SYNC
Si está terminando una consulta en ClickHouse Cloud o en un clúster autogestionado, asegúrese de usar la opción ON CLUSTER [cluster-name] para garantizar que la consulta se termine en todas las réplicas.
Los usuarios de solo lectura solo pueden detener sus propias consultas.
De forma predeterminada, se usa la versión asíncrona de las consultas (ASYNC), que no espera la confirmación de que las consultas se hayan detenido.
La versión síncrona (SYNC) espera a que todas las consultas se detengan y muestra información sobre cada proceso a medida que se detiene.
La respuesta contiene la columna kill_status, que puede tomar los siguientes valores:
finished – La consulta se terminó correctamente.
waiting – Esperando a que la consulta finalice después de enviarle una señal de terminación.
- Los demás valores explican por qué la consulta no puede detenerse.
Una consulta de prueba (TEST) solo comprueba los permisos del usuario y muestra una lista de las consultas que se van a detener.
La presencia de mutaciones de larga duración o incompletas suele indicar que un servicio de ClickHouse funciona mal. La naturaleza asíncrona de las mutaciones puede hacer que consuman todos los recursos disponibles del sistema. Puede que necesite hacer una de estas dos cosas:
- Pausar todas las mutaciones nuevas, los
INSERT y los SELECT, y permitir que la cola de mutaciones termine de procesarse.
- O eliminar manualmente algunas de estas mutaciones enviando un comando
KILL.
KILL MUTATION
WHERE <where expression to SELECT FROM system.mutations query>
[TEST]
[FORMAT format]
Intenta cancelar y eliminar las mutaciones que se están ejecutando en ese momento. Las mutaciones que se van a cancelar se seleccionan de la tabla system.mutations mediante el filtro especificado en la cláusula WHERE de la consulta KILL.
Una consulta de prueba (TEST) solo verifica los permisos del usuario y muestra una lista de mutaciones que se deben detener.
Ejemplos:
Obtener un count() del número de mutaciones incompletas:
Cantidad de mutaciones de un único nodo de ClickHouse:
SELECT count(*)
FROM system.mutations
WHERE is_done = 0;
Número de mutaciones de un clúster de réplicas de ClickHouse:
SELECT count(*)
FROM clusterAllReplicas('default', system.mutations)
WHERE is_done = 0;
Consulta la lista de mutaciones incompletas:
Lista de mutaciones de un solo nodo de ClickHouse:
SELECT mutation_id, *
FROM system.mutations
WHERE is_done = 0;
Lista de mutaciones de un clúster de ClickHouse:
SELECT mutation_id, *
FROM clusterAllReplicas('default', system.mutations)
WHERE is_done = 0;
Cancele las mutaciones según sea necesario:
-- Cancelar y eliminar todas las mutaciones de la tabla individual:
KILL MUTATION WHERE database = 'default' AND table = 'table'
-- Cancelar la mutación específica:
KILL MUTATION WHERE database = 'default' AND table = 'table' AND mutation_id = 'mutation_3.txt'
La consulta es útil cuando una mutación está bloqueada y no puede finalizar (p. ej., si alguna función de la consulta de mutación lanza una excepción al aplicarse a los datos contenidos en la tabla).
Los cambios ya realizados por la mutación no se revierten.
La columna is_killed=1 (solo ClickHouse Cloud) de la tabla system.mutations no significa necesariamente que la mutación haya finalizado por completo. Es posible que una mutación permanezca durante un período prolongado en un estado en el que is_killed=1 e is_done=0. Esto puede ocurrir si otra mutación de larga duración está bloqueando la mutación cancelada. Esta es una situación normal.