版本 V6.5.6
各位大佬,ADMIN CANCEL DDL 与kill session_id 的执行过程有啥区别吗?
- 目标对象:
tidb_mem_oom_action
设置为CANCEL
是针对单个SQL查询的内存控制,而KILL process_id
是针对整个进程或会话的终止。 - 执行时机:
CANCEL
是在SQL查询的内存使用超过设定阈值时自动触发,而KILL
是由用户根据需要手动执行的。 - 影响范围:
CANCEL
只影响触发条件的单个SQL查询,而KILL
可能会影响该进程正在执行的所有查询和操作。 - 反馈机制:
CANCEL
会给客户端返回详细的错误信息,而KILL
的反馈可能相对简单,只是表明进程已被终止。
综上所述,tidb_mem_oom_action
设置为 CANCEL
和 KILL process_id
在TiDB中的执行过程和目的存在明显的区别。选择使用哪种方法取决于具体的需求和场景。
1 个赞
ADMIN CANCEL DDL
专门用于DDL操作,而KILL SESSION_ID
可以终止任何类型的会话。
1 个赞
V6.2.0之后 2个语句对ddl 的取消 执行过程 一样吗?
没找到类似资料,只能坐等源码大佬来解答了
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只能终止连接,但是无法终止已经发送给数据库并且还在数据库中执行的语句。