TiDB执行kill mysql查询id的指令,无法kill掉

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【TiDB 版本】:v4.0.7
  • 【问题描述】:
    我想实现一个功能,就是定时kill掉执行时间超过一定时长的查询语句。
    大致原理,是定时执行show processlist指令,找出其中执行时间超过一定时长,比如3分钟的,满足一定条件的sql语句。
    但是我在测试的时候,一条SQL执行时长大约50秒,我在中途根据这个查询的id kill掉这个查询,发现还是能查询出来结果,没有真正被kill掉,不知道是什么问题。
    请问是tidb不支持kill的功能吗?或者如果我想实现这种kill的功能,我可以如何实现?

执行语句是什么。
https://docs.pingcap.com/zh/tidb/stable/sql-statement-kill#kill-tidb

系统变量了解下
https://docs.pingcap.com/zh/tidb/stable/system-variables#max_execution_time

好的,现在可以了,非常感谢。我之前用的是kill + id,现在用kill tidb + id 就可以了

:call_me_hand:

还想继续请教下。
1、kill tidb + id, 是把这个jdbc连接kill掉了吗?还是只是像mysql那样把这次查询kill掉了? 看图没看太明白。


2、系统变量的作用域这块。我是通过jdbc调用TiDB的,我能否每次使用JDBC连接TiDB时,设置一下会话级别的这个系统变量,从而实现仅限制这次jdbc会话的功能?我不太想设置全局的这个系统变量,这样会把其他的执行时间比较长的SQL也给限制了。如果可以的话,方便告诉我一下大致怎么写吗?是statement.execute(set max_execution_time = 10000) 这样吗?

与 mysql 开发相同,jdbc 中也能设置最大 sql 执行时间。或者在一个 session 中执行这个语句,作用域就仅在这个 session 中。了

这个变量设置 global 级别就是所有链接都生效了。

仅 kill 这个 connect id

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。