【 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) 截图此页面
【附件:截图/日志/监控】
在什么类型上创建索引,有多少数据,超过2分钟就取消了?我这边都是十几分,半小时的都有,只要tikv响应时间正常,tidb没有慢查,多观察一会看看
tidb的owner 节点显示 日志 syncer check all versions, someone is not synced
重启有问题的tidb实例,建索引,还是卡着不动,数据量20万
zhanggame1
(Ti D Ber G I13ecx U)
6
常见问题,一般重启执行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;
小龙虾爱大龙虾
(Minghao Ren)
8
可能是MDL锁导致的,应该在卡住的时候查询下mysql.tidb_mdl_view,如果视图中没有信息拿就是bug,v6.5是有个bug,会导致DDL卡住
zhanggame1
(Ti D Ber G I13ecx U)
9
7.5也有,ddl卡住我见过几次了。我们测试天天跑不知道几千个ddl
WalterWj
(王军 - PingCAP)
10
DDL 取消 我记得得用 admin cancel 语法
这种方式是杀不掉的进程的,还是卡着,虽然kill命令会执行,但是实际进程还在
V6.5.4版本亲测是可以的,可以杀掉进程,并且admin show ddl jobs后面可以看到该DDL Job的State为rollback done,即已经执行的部分已完成回滚。
胡杨树旁
18
6.3版本引入元数据锁,ddl 操作是持久化在tikv节点的,kill tidb +进程号 这种并不能取消掉执行的ddl 操作。 admin cancel ddl jobs *** 这种方式,如果时间太久,不想等的话,就重启卡住的tidb节点
show processlist找到对应进程,然后kill tidb 进程号
得到的经验是,建索引 是比较耗资源,时间的操作,如果中途取消,一般会消耗会更多的时间。如果不耐心等待操作完成,而进行其他操作,估计会遇到更慢,更麻烦的结果 。