DDL 队列阻塞,所有DDL均无法执行

【 TiDB 使用环境】测试环境
【 TiDB 版本】 v5.4.3
【复现路径】
使用tiup upgrade集群升级,v3.0.19 → 4.0.16 → v5.4.3 均正常,v5.4.3 → v6.5.0到重启tidb过程时失败,查看日志发现ddl队列卡住,反复打如下日志:
[2023/02/04 19:25:34.130 +08:00] [INFO] [ddl_worker.go:932] [“[ddl] wait latest schema version changed”] [worker=“worker 1, tp general”] [ver=37633] [“take time”=54.954686ms] [job=“ID:32748, Type:modify column, State:done, SchemaState:public, SchemaID:3, TableID:19, RowCount:0, ArgLen:0, start time: 2023-02-03 19:04:57.588 +0800 CST, Err:, ErrCount:0, SnapshotVersion:0”]
[2023/02/04 19:25:34.130 +08:00] [INFO] [ddl_worker.go:906] [“[ddl] schema version doesn’t change”] [worker=“worker 1, tp general”]
[2023/02/04 19:25:34.136 +08:00] [ERROR] [delete_range.go:101] [“[ddl] add job into delete-range table failed”] [jobID=32748] [jobType=“modify column”] [error=“json: cannot unmarshal object into Go value of type []int64”]
[2023/02/04 19:25:34.136 +08:00] [WARN] [ddl_worker.go:201] [“[ddl] handle DDL job failed”] [worker=“worker 1, tp general”] [error=“json: cannot unmarshal object into Go value of type []int64”]

不行就取消掉

参考这个命令
https://docs.pingcap.com/zh/tidb/stable/sql-statement-admin-cancel-ddl#admin-cancel-ddl

尝试过取消,执行后长期处于cancelling状态

要是没取消成功,还是 cancelling… 那就糟了

一般要求升级途中是不能有正在执行的ddl操作的。。。

确实可能是升级过程中DDL了,这些情况有补救办法吗

测试环境,就自己备份数据,拆了重建算了… :smiling_imp:

其实还是想在这个集群上把这个问题解决掉。通过这次升级,说明有时候可能无法完全避免升级的时候无DDL,比如业务自己可能已经不记得某个任务会什么时候自动进行DDL

升级前可以admin show ddl,查询是否有在执行的SQL,create table 应该很快执行完毕的,我遇到长时间的SQL只有加索引的情况