建索引卡了,而且kill tidb命令无法停止运行命令

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】 tidb 6.5.0
【复现路径】 创建索引过程中,卡了,正常2分钟建完索引,但是通过admin show ddl jobs


row count显示是0
然后使用ADMIN CANCEL DDL JOBS 5652 停止建索引任务,虽然在admin show ddl jobs显示是停止了,
但是在navicat执行界面显示还在运行
通过show processlist查看sql还在运行, kill tidb +进程号,也无法停止

SELECT * FROM mysql.tidb_mdl_view
查询返回是空的结果
【遇到的问题:问题现象及影响】
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】

可以尝试以下步骤:

  1. 检查 TiDB 集群状态:使用 tidb-ctl 工具或者通过 TiDB Dashboard 查看 TiDB 集群的状态,确保集群正常运行,没有异常或者报错信息。
  2. 检查 TiDB 日志:查看 TiDB 的日志,特别是 TiDB Server 的日志,以了解是否有任何错误或异常信息。日志文件通常位于 TiDB Server 的日志目录下。
  3. 检查 TiKV 状态:使用 pd-ctl 工具或者通过 TiDB Dashboard 查看 TiKV 的状态,确保 TiKV 节点正常运行,没有异常或者报错信息。
  4. 重启 TiDB 进程:如果以上步骤没有解决问题,您可以尝试重启 TiDB 进程。首先使用 kill tidb +进程号 命令停止 TiDB 进程,然后再启动 TiDB 进程。

在什么类型上创建索引,有多少数据,超过2分钟就取消了?我这边都是十几分,半小时的都有,只要tikv响应时间正常,tidb没有慢查,多观察一会看看

tidb的owner 节点显示 日志 syncer check all versions, someone is not synced
重启有问题的tidb实例,建索引,还是卡着不动,数据量20万

有一个tidb节点僵死有问题,重启后,恢复正常了

常见问题,一般重启执行ddl的owner tidb server,不行就把所有tidb server重启了

我试了下下面的方式是可以kill掉的

-- 先查出对应SQL的ID
select * from information_schema.cluster_processlist where command != 'Sleep';
-- 对上面查出的结果找到对应SQL的ID执行kill操作
kill tidb 对应SQL的ID;

可能是MDL锁导致的,应该在卡住的时候查询下mysql.tidb_mdl_view,如果视图中没有信息拿就是bug,v6.5是有个bug,会导致DDL卡住

7.5也有,ddl卡住我见过几次了。我们测试天天跑不知道几千个ddl

DDL 取消 我记得得用 admin cancel 语法

这种方式是杀不掉的进程的,还是卡着,虽然kill命令会执行,但是实际进程还在

ddl杀不掉,只能重启,我每次都杀不掉

mysql8.0版本之前也遇到过,没有更好的方法

V6.5.4版本亲测是可以的,可以杀掉进程,并且admin show ddl jobs后面可以看到该DDL Job的State为rollback done,即已经执行的部分已完成回滚。

并且实际查看表结构发现确实没有创建该索引

应该是TIKV有节点异常了

打卡学习

6.3版本引入元数据锁,ddl 操作是持久化在tikv节点的,kill tidb +进程号 这种并不能取消掉执行的ddl 操作。 admin cancel ddl jobs *** 这种方式,如果时间太久,不想等的话,就重启卡住的tidb节点

show processlist找到对应进程,然后kill tidb 进程号

得到的经验是,建索引 是比较耗资源,时间的操作,如果中途取消,一般会消耗会更多的时间。如果不耐心等待操作完成,而进行其他操作,估计会遇到更慢,更麻烦的结果 。