Kill命令无效,有没有不重启Tidb能够解决的办法

【TiDB 使用环境】生产环境 /测试环境
【TiDB 版本】8.1.0
【部署方式】虚拟机集群部署
【集群节点数】4
【问题】一张17万数据的表,变更一个字段是否允许为null的属性,执行alter table锁表,一直执行不完,用kill命令也终止不了,如何解决?

查阅下 DDL JOB Status,通过 DDL JOB 的命令来进行控制,kill 确实不行。

如果发现卡住,也可以通过重启 tidb 节点后,在重新取消。

1 个赞

alter table 应该不锁表的,另外17万数据量应该很少,秒完成才对。

定位阻塞的 DDL 任务
– 查询当前正在执行的 DDL 任务
SELECT * FROM information_schema.ddl_jobs WHERE STATE = ‘running’;
– 获取任务的 JOB_ID,以及关联的 TABLE_ID

强制终止 DDL 任务
– 1. 开启强制终止开关
SET GLOBAL tidb_ddl_reorg_worker_cnt = 0;
SET GLOBAL tidb_ddl_enable_fast_reorg = OFF;

– 2. 终止指定 JOB_ID 的 DDL 任务
ADMIN CANCEL DDL JOB <JOB_ID>;

这样可以吗

1 个赞

ddl命令,用admin cancel ddl 的方式终止试试

执行了取消之后状态确实变为canceling了,但是又等了好久 :dizzy_face:
正常的读写sql执行的很快,但是变更表结构、加索引,十几万的数据怎么执行的这么慢

我也觉得应该秒执行,但是好怪,不知道什么原因会执行好几个小时

数据回填会慢一点,想要快就用新版的 tidb,至少 8.5.x

是不是开启了fast ddl但是fast ddl的还是用的默认路径/tmp

我们线上用的是7.5,也没有遇到类似情况。

执行不完的意思是,执行窗口一直没有返回吗?

用admin命令线查看ddl进度,如果不是太多,可以考虑admin的kill|cancel类命令完成撤销