KILL QUERY и KILL MUTATION.
По умолчанию при отсутствии совпадений оператор завершается без исключения. Чтобы KILL QUERY генерировал исключение, если в system.processes нет строк, удовлетворяющих его условию WHERE, за исключением строки текущего оператора KILL, а KILL MUTATION — если в system.mutations нет строк, удовлетворяющих его условию WHERE, установите для параметра kill_throw_if_noop значение true.
При выполнении с ON CLUSTER отсутствие совпадений не вызывает исключения, поскольку результаты поиска совпадений не агрегируются по всем хостам.
KILL QUERY
WHERE запроса KILL.
Примеры:
Сначала нужно получить список незавершённых запросов. Этот SQL-запрос выводит их, начиная с тех, которые выполняются дольше всего:
Список с одного узла ClickHouse:
SELECT на system.processes всё равно может отменить собственный запрос, указав его идентификатор:
KILL QUERY WHERE query_id = '<id>'. Если у пользователя нет ни этой привилегии, ни привилегии KILL QUERY, попытка отменить запрос,
выполняющийся от имени другого пользователя, не приведёт к его отмене и не вернёт ни одной строки, но и ошибки не вызовет, если только
не включён параметр kill_throw_if_noop, при котором операция,
не имеющая эффекта, вызывает исключение. Пользователю с привилегией KILL QUERY, но без указанной привилегии SELECT, будет отказано из-за отсутствия SELECT.
Для любых других условий WHERE, а также для ON CLUSTER по-прежнему требуются привилегии, описанные выше.
По умолчанию используется асинхронная версия запросов (ASYNC), которая не ждёт подтверждения остановки запросов.
Синхронная версия (SYNC) ждёт остановки всех запросов и показывает информацию о каждом процессе по мере его остановки.
Ответ содержит столбец kill_status, который может принимать следующие значения:
finished– Запрос был успешно завершён.waiting– Ожидание завершения запроса после отправки ему сигнала на завершение.- Другие значения объясняют, почему запрос не удаётся остановить.
TEST) только проверяет права пользователя и показывает список запросов для остановки.
KILL MUTATION
Наличие долго выполняющихся или незавершённых мутаций часто указывает на то, что сервис ClickHouse работает некорректно. Асинхронная природа мутаций может приводить к тому, что они потребляют все доступные ресурсы системы. Вам может потребоваться:- Приостановить все новые мутации,
INSERTы иSELECTы и дождаться обработки очереди мутаций. - Или вручную завершить некоторые из этих мутаций, отправив команду
KILL.
system.mutations с помощью фильтра, заданного в условии WHERE запроса KILL.
Тестовый запрос (TEST) лишь проверяет права пользователя и выводит список мутаций, которые будут остановлены.
Примеры:
Получить count() незавершённых мутаций:
Количество мутаций на отдельном узле ClickHouse:
столбец
is_killed=1 (Только в ClickHouse Cloud) в таблице system.mutations не обязательно означает, что мутация полностью завершена. В некоторых случаях мутация может долго оставаться в состоянии, когда is_killed=1, а is_done=0. Это может происходить, если другая долго выполняющаяся мутация блокирует завершённую мутацию. Это нормальная ситуация.