Перейти к содержимому
Последнее обновление

Завершение запросов и отключение сеансов: руководство по команде KILL

Команда KILL отменяет выполняющийся запрос или отключает указанный сеанс. Перед её использованием получите идентификатор нужного запроса (Query ID, Connection ID или Trace ID), затем выполните соответствующий оператор KILL.

Получение идентификаторов запросов​

Команда KILL поддерживает следующие три типа идентификаторов запросов:

Тип идентификатораОписаниеСпособ получения
Query IDУникальный идентификатор, который система автоматически создаёт для каждого запросаSHOW PROCESSLIST или information_schema.processlist
Connection IDУникальный идентификатор соединения сеансаSHOW PROCESSLIST или information_schema.processlist
Trace IDПользовательский идентификатор запроса (поддерживается начиная с 2.1.11 / 3.0.7)Задаётся через переменную session_context

Просмотр через PROCESSLIST​

SHOW PROCESSLIST отображает все текущие соединения сеансов и выполняемые в них запросы, включая Query ID и Connection ID.

SHOW PROCESSLIST;

Пример вывода:

+------------------+------+------+---------------------+---------------------+----------+------+---------+------+-------+----------------------------------+------------------+---------------+--------------+
| CurrentConnected | Id | User | Host | LoginTime | Catalog | Db | Command | Time | State | QueryId | Info | FE | CloudCluster |
+------------------+------+------+---------------------+---------------------+----------+------+---------+------+-------+----------------------------------+------------------+---------------+--------------+
| No | 2 | root | 172.20.32.136:54850 | 2025-05-11 10:41:52 | internal | | Query | 6 | OK | 12ccf7f95c1c4d2c-b03fa9c652757c15| select sleep(20) | 172.20.32.152 | NULL |
| Yes | 3 | root | 172.20.32.136:54862 | 2025-05-11 10:41:55 | internal | | Query | 0 | OK | b710ed990d4144ee-8b15bb53002b7710| show processlist | 172.20.32.152 | NULL |
| No | 1 | root | 172.20.32.136:47964 | 2025-05-11 10:41:54 | internal | | Sleep | 11 | EOF | b60daa992bac4fe4-b29466aacce67d27| | 172.20.32.153 | NULL |
+------------------+------+------+---------------------+---------------------+----------+------+---------+------+-------+----------------------------------+------------------+---------------+--------------+

Описание основных полей:

  • CurrentConnected: значение Yes указывает на соединение, соответствующее текущему сеансу.
  • Id: Connection ID, уникальный идентификатор соединения.
  • QueryId: Query ID, уникальный идентификатор последнего выполненного или выполняющегося сейчас SQL-запроса.

Поведение по умолчанию: SHOW PROCESSLIST отображает только сеансы на узле FE, к которому установлено текущее соединение, и не включает сеансы других узлов FE. Чтобы просмотреть сеансы на всех узлах FE, задайте следующую переменную перед выполнением запроса:

SET show_all_fe_connection = true;
SHOW PROCESSLIST;

Также можно использовать системную таблицу information_schema, которая по умолчанию отображает сеансы на всех узлах FE и не требует дополнительной настройки:

SELECT * FROM information_schema.processlist;

Идентификация запросов по Trace ID​

Эта возможность поддерживается начиная с версий 2.1.11 и 3.0.7.

Trace ID — это пользовательский идентификатор, который вы заранее назначаете запросу. Он позволяет инструменту управления записать уникальный идентификатор запроса ещё до его отправки, чтобы впоследствии запрос можно было в любой момент отменить по Trace ID.

Задайте Trace ID для текущего сеанса следующим образом:

SET session_context = "trace_id:your_trace_id";
  • your_trace_id: пользовательская строка, которая не должна содержать символ ;. Для обеспечения уникальности рекомендуется использовать UUID.
  • Trace ID — параметр уровня сеанса, который действует только в текущем сеансе. После его задания все последующие запросы в этом сеансе будут связаны с этим Trace ID.

Также его можно задать с помощью Hint в отдельном запросе, не изменяя переменную сеанса:

SELECT /*+SET_VAR(session_context="trace_id:your_trace_id")*/ * FROM table ...;

Выполнение операции KILL​

Права доступа: обычные пользователи могут завершать только запросы, которые отправили сами. Пользователи ADMIN могут завершать запросы любого пользователя.

Завершение запроса​

KILL QUERY отменяет указанный выполняющийся запрос, не отключая сеанс.

KILL QUERY "query_id" | "trace_id" | connection_id;

Сравнение трёх вариантов:

Тип параметраПримерОбласть действия
"query_id"KILL QUERY "d36417cc05ff41ab-9d3afe49be251055";Ищет на всех узлах FE и отменяет соответствующий запрос
"trace_id"KILL QUERY "your_trace_id";Ищет на всех узлах FE и отменяет соответствующий запрос
connection_idKILL QUERY 55;Отменяет только запрос, выполняющийся в указанном соединении на узле FE, к которому установлено текущее соединение

Примечания:

  • Query ID и Trace ID необходимо заключать в кавычки. Connection ID должен быть целым числом больше 0 и указываться без кавычек.
  • KILL QUERY с указанием Connection ID действует только на узле FE, к которому установлено текущее соединение.

Разрыв соединения​

KILL CONNECTION отключает указанный сеанс, а также отменяет запрос, выполняющийся в этом соединении.

KILL [CONNECTION] connection_id;

Ключевое слово CONNECTION можно опустить. Следующие два варианта эквивалентны:

KILL CONNECTION 55;
KILL 55;

Примечание: значения Connection ID на разных узлах FE могут совпадать. Эта операция действует только на узле FE, к которому установлено текущее соединение.

Рекомендуемая практика: управление запросами по Trace ID​

В системе управления или на бизнес-платформе рекомендуется использовать Trace ID, чтобы заранее помечать запросы и отменять именно нужный запрос. Порядок действий:

  1. Перед отправкой запроса создайте уникальный Trace ID (рекомендуется UUID) и привяжите его к запросу.
  2. Во время выполнения запроса система может в любой момент отправить команду KILL, указав Trace ID.

Привязать Trace ID можно двумя способами:

  • Задать переменную сеанса перед запросом (подходит для работы с одним соединением):

    SET session_context = "trace_id:your_trace_id";
    SELECT * FROM table ...;
  • Встроить Hint в запрос (подходит для повторного использования соединений из пула):

    SELECT /*+SET_VAR(session_context="trace_id:your_trace_id")*/ * FROM table ...;

После привязки запрос можно в любой момент отменить следующей командой:

KILL QUERY "your_trace_id";