如何在ClickHouse中终止一个进程(查询)

9
有没有办法在ClickHouse中终止一个空闲查询?我有一个OPTIMIZE查询,它永远不会完成(因为它正在针对一个ReplicatedMergeTree表运行),导致我需要删除的表被阻塞。
2个回答

12

我通常跑步

SELECT query_id, query FROM system.processes;

查找正在运行的查询。从列表中找到我想要终止的查询的query_id,然后执行相应操作。

KILL QUERY WHERE query_id = '<id>';

更多信息可以在KILL QUERY文档中找到。

要终止Mutation,可以使用类似的KILL MUTATION命令。


5

是的,有一个replace_running_query选项。

简而言之,您可以向HTTP请求添加query_id参数,例如:

http://localhost:8123/?query=SELECT * FROM system.numbers LIMIT 100000000& replace_running_query=1&query_id=example

然后进行第二个HTTP请求,使用相同的query_id

http://localhost:8123/?query=SELECT 1&replace_running_query=1&query_id=example

服务器将取消第一个查询并运行第二个查询。

您可以在配置文件中覆盖此选项(默认情况下禁用),以摆脱将其放置在请求参数中。


我没有使用HTTP接口,而是使用clickhouse-client。我认为不可能通过客户端使用replace_running_query。顺便说一下,我不是系统管理员,因此无法修改配置或打开8123端口。我请求系统管理员重新启动受影响的节点,这解决了问题(但并不理想)。 - DamnWidget
1
顺便说一下,我制作了clickhouse-cli,它使用相同的方法(使用replace_running_query)在Ctrl+C上终止查询。嘿,感谢Anaconda,我经常使用它! - Igor Hatarist
会试一下,谢谢!我也经常使用Anaconda,这也是我写它的主要原因 :) - DamnWidget

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接