ADMIN CANCEL DDL与kill session_id区别

版本 V6.5.6
各位大佬,ADMIN CANCEL DDL 与kill session_id 的执行过程有啥区别吗?

  1. 目标对象tidb_mem_oom_action 设置为 CANCEL 是针对单个SQL查询的内存控制,而 KILL process_id 是针对整个进程或会话的终止。
  2. 执行时机CANCEL 是在SQL查询的内存使用超过设定阈值时自动触发,而 KILL 是由用户根据需要手动执行的。
  3. 影响范围CANCEL 只影响触发条件的单个SQL查询,而 KILL 可能会影响该进程正在执行的所有查询和操作。
  4. 反馈机制CANCEL 会给客户端返回详细的错误信息,而 KILL 的反馈可能相对简单,只是表明进程已被终止。

综上所述,tidb_mem_oom_action 设置为 CANCELKILL process_id 在TiDB中的执行过程和目的存在明显的区别。选择使用哪种方法取决于具体的需求和场景。

1 个赞

ADMIN CANCEL DDL专门用于DDL操作,而KILL SESSION_ID可以终止任何类型的会话。

1 个赞

v6.2.0 之前区别更大。

2 个赞

V6.2.0之后 2个语句对ddl 的取消 执行过程 一样吗?

:thinking:没找到类似资料,只能坐等源码大佬来解答了

6.2.0 后两者如果都可以对 ddl进行处理。猜测,区别是否是强制中止、cancel应该更温和。纯属个人猜测。

已经学习各位大佬的答案。顺带提个问题,感觉kill process id来终止sql语句执行会不会粒度太大了?没有办法直接终止当前执行的sql语句,返回一个abort abnormally吗?

这个应该没有,oracle、mysql都是kill会话

kill query 语句

1 个赞

看上去不支持呢

按ctrl+c 停也能停,比较慢

ADMIN CANCEL DDL:用来取消一个正在进行的DDL任务
kill session_id: 则是用于终止整个数据库会话,包括其中可能正在进行的任何类型的操作,如ddl、dml等

啊?不行吧,我看官方文档ctrl+c只是终止连接,sql语句还是在跑

过程可能差不多,只是操作对象的不同

一个是 DDL Job,一个是 Session

我理解也是这样的,ctrl+c只能终止连接,但是无法终止已经发送给数据库并且还在数据库中执行的语句。