Skip to main content
На этой странице описаны операторы KILL QUERY и KILL MUTATION. По умолчанию при отсутствии совпадений оператор завершается без исключения. Чтобы KILL QUERY генерировал исключение, если в system.processes нет строк, удовлетворяющих его условию WHERE, за исключением строки текущего оператора KILL, а KILL MUTATION — если в system.mutations нет строк, удовлетворяющих его условию WHERE, установите для параметра kill_throw_if_noop значение true. При выполнении с ON CLUSTER отсутствие совпадений не вызывает исключения, поскольку результаты поиска совпадений не агрегируются по всем хостам.

KILL QUERY

Попытка принудительно завершить выполняющиеся в данный момент запросы. Запросы для завершения выбираются из таблицы system.processes по критериям, заданным в условии WHERE запроса KILL. Примеры: Сначала нужно получить список незавершённых запросов. Этот SQL-запрос выводит их, начиная с тех, которые выполняются дольше всего: Список с одного узла ClickHouse:
Список в кластере ClickHouse:
Завершите запрос:
Если вы завершаете запрос в ClickHouse Cloud или в самоуправляемом кластере, обязательно используйте предложение ON CLUSTER [cluster-name], чтобы запрос был завершён на всех репликах.
Пользователи в режиме только для чтения могут останавливать только собственные запросы. Пользователь без привилегии 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, который может принимать следующие значения:
  1. finished – Запрос был успешно завершён.
  2. waiting – Ожидание завершения запроса после отправки ему сигнала на завершение.
  3. Другие значения объясняют, почему запрос не удаётся остановить.
Тестовый запрос (TEST) только проверяет права пользователя и показывает список запросов для остановки.

KILL MUTATION

Наличие долго выполняющихся или незавершённых мутаций часто указывает на то, что сервис ClickHouse работает некорректно. Асинхронная природа мутаций может приводить к тому, что они потребляют все доступные ресурсы системы. Вам может потребоваться:
  • Приостановить все новые мутации, INSERTы и SELECTы и дождаться обработки очереди мутаций.
  • Или вручную завершить некоторые из этих мутаций, отправив команду KILL.
Пытается отменить и удалить мутации, которые выполняются в данный момент. Мутации для отмены выбираются из таблицы system.mutations с помощью фильтра, заданного в условии WHERE запроса KILL. Тестовый запрос (TEST) лишь проверяет права пользователя и выводит список мутаций, которые будут остановлены. Примеры: Получить count() незавершённых мутаций: Количество мутаций на отдельном узле ClickHouse:
Количество мутаций в кластере реплик ClickHouse:
Запросите список незавершённых мутаций: Список мутаций на одном узле ClickHouse:
Список мутаций в кластере ClickHouse:
При необходимости завершите мутации:
Запрос полезен, когда мутация зависла и не может завершиться (например, если какая-либо функция в запросе мутации генерирует исключение при применении к данным, содержащимся в таблице). Изменения, уже внесённые мутацией, не откатываются.
столбец is_killed=1 (Только в ClickHouse Cloud) в таблице system.mutations не обязательно означает, что мутация полностью завершена. В некоторых случаях мутация может долго оставаться в состоянии, когда is_killed=1, а is_done=0. Это может происходить, если другая долго выполняющаяся мутация блокирует завершённую мутацию. Это нормальная ситуация.