KILL

KILL

두 가지 종류의 kill 문이 있어요: 쿼리를 죽이는 것과 mutation을 죽이는 것.

출처: 문서

본문

KILL QUERY

KILL QUERY [ON CLUSTER cluster]
  WHERE <where expression to SELECT FROM system.processes query>
  [SYNC|ASYNC|TEST]
  [FORMAT format]

현재 실행 중인 쿼리를 강제로 종료하려고 시도해요. 종료할 쿼리는 KILL 쿼리의 WHERE 절에 정의된 기준으로 system.processes 테이블에서 선택됩니다.

Examples:

먼저 미완료 쿼리 목록을 가져와야 해요. 이 SQL 쿼리는 가장 오래 실행된 순서에 따라 그것들을 제공합니다.

단일 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;

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;

쿼리 죽이기:

-- Forcibly terminates all queries with the specified query_id:
KILL QUERY WHERE query_id='2-857d-4a57-9ee0-327da5d60a90'

-- Synchronously terminates all queries run by 'username':
KILL QUERY WHERE user='username' SYNC

ClickHouse Cloud 또는 자체 관리 클러스터에서 쿼리를 죽인다면, 쿼리가 모든 리플리카에서 종료되도록 반드시 ON CLUSTER [cluster-name] 옵션을 사용하세요.

읽기 전용 사용자는 자기 쿼리만 중지할 수 있어요.

기본적으로 쿼리의 비동기 버전(ASYNC)이 사용되는데, 이는 쿼리가 중지되었다는 확인을 기다리지 않습니다.

동기 버전(SYNC)은 모든 쿼리가 중지될 때까지 기다리고 각 프로세스가 중지될 때 정보를 표시합니다. 응답에는 kill_status 컬럼이 포함되며 다음 값을 가질 수 있어요.

  1. finished – 쿼리가 성공적으로 종료되었습니다.
  2. waiting – 쿼리에 종료 신호를 보낸 후 끝나기를 기다리고 있습니다.
  3. 다른 값들은 쿼리를 중지할 수 없는 이유를 설명합니다.

테스트 쿼리(TEST)는 사용자의 권한만 확인하고 중지할 쿼리 목록을 표시합니다.

KILL MUTATION

오래 실행되거나 불완전한 mutation이 있다는 것은 종종 ClickHouse 서비스가 제대로 실행되지 않는다는 표시예요. mutation의 비동기적 특성은 시스템의 모든 사용 가능한 리소스를 소비하게 만들 수 있습니다. 다음 중 하나를 해야 할 수 있습니다.

  • 모든 새 mutation, INSERT, SELECT를 일시 중지하고 mutation 큐가 완료되도록 한다.
  • 또는 KILL 명령을 보내 이런 mutation 중 일부를 수동으로 죽인다.
KILL MUTATION
  WHERE <where expression to SELECT FROM system.mutations query>
  [TEST]
  [FORMAT format]

현재 실행 중인 mutations을 취소하고 제거하려고 시도해요. 취소할 mutation은 KILL 쿼리의 WHERE 절로 지정된 필터를 사용해 system.mutations 테이블에서 선택됩니다.

테스트 쿼리(TEST)는 사용자의 권한만 확인하고 중지할 mutation 목록을 표시합니다.

Examples:

불완전한 mutation의 count()를 얻기:

단일 ClickHouse 노드의 mutation 수:

SELECT count(*)
FROM system.mutations
WHERE is_done = 0;

리플리카의 ClickHouse 클러스터의 mutation 수:

SELECT count(*)
FROM clusterAllReplicas('default', system.mutations)
WHERE is_done = 0;

불완전한 mutation 목록 쿼리:

단일 ClickHouse 노드의 mutation 목록:

SELECT mutation_id, *
FROM system.mutations
WHERE is_done = 0;

ClickHouse 클러스터의 mutation 목록:

SELECT mutation_id, *
FROM clusterAllReplicas('default', system.mutations)
WHERE is_done = 0;

필요에 따라 mutation을 죽이세요:

-- Cancel and remove all mutations of the single table:
KILL MUTATION WHERE database = 'default' AND table = 'table'

-- Cancel the specific mutation:
KILL MUTATION WHERE database = 'default' AND table = 'table' AND mutation_id = 'mutation_3.txt'

이 쿼리는 mutation이 막혀 끝낼 수 없을 때(예: mutation 쿼리의 어떤 함수가 테이블의 데이터에 적용될 때 예외를 던질 때) 유용해요.

mutation이 이미 만든 변경은 롤백되지 않습니다.

system.mutations 테이블의 is_killed=1 컬럼(ClickHouse Cloud 전용)은 mutation이 완전히 완료되었음을 의미하지는 않아요. mutation이 오랜 기간 is_killed=1이고 is_done=0인 상태로 남아 있을 수 있습니다. 이것은 다른 오래 실행되는 mutation이 죽은 mutation을 막고 있을 때 일어날 수 있어요. 이것은 정상적인 상황입니다.

더 알아보기 (Learn more)