TiDB DDL执行时间长,回滚时间长

【 TiDB 使用环境】生产环境
【 TiDB 版本】V6.5.5
【复现路径】添加索引,无法添加成功。
【遇到的问题:问题现象及影响】添加索引,无法添加成功。
1500行的表,添加索引1天未完成
admin show ddl jobs 一直显示 running状态

这张表做过压力测试,数据量从1500行增加到 1000万行
在1000万行的数据量上执行过添加2列的组合索引,然后一直卡着不动,最后执行了 admin cancel ddl jobs ,耗时8 小时后显示回滚成功

开始以为是数据量大的原因导致,后面进行了压测数据清理工作,数据量恢复到1500行,并进行了 analyze table xxx,数据信息显示的行数正常。

看下tidb server的日志呢,有没有error日志

1 个赞

1500行的表增加索引,正常应该是秒加成功;
看看日志,有无报错,有无DDL一直没有完成

数据清理工作怎么做的?
show table regions看看

tidb-server 滚动重启下,可能是哪里卡主了。升级到最新的 65x 版本吧

1 个赞

其它表的DDL操作,正常执行,V6.5.5是可以并发执行的

重启过tidb-server,效果一样

delete 10000行 循环删除,删除完成后,analyze table

:thinking: 难道是分区表,是不是分区很多?
硬件达标的话 1000w 表加索引 3min 也就加上了。不可能很慢的。

1 个赞

硬件没有问题,其它3000万的表添加索引,虽然时间长点,但是可以正常添加完成。

我这个版本是从 v5.4.3升到v6.5.5的,然后有个 /tmp/tidb 这个目录集群没有自动创建,当时报了这个目录不存在。Fast Online DDL 好像是这个新功能默认打开后,没有自动创建,但是我手动在所有tidb节点上都创建完成授权后,还是一样没有效果,总感觉它是一张大表,不像一张 1000行的小表。

mark 一下,后续需要关注一下,论坛有好多ddl 执行失败的

压测不止这张表吧,观察下操作系统的资源情况呢,比如磁盘容量。

show table xxx regions;

结果明显多

生产库上 1500行 show table xxx regions 显示 有 2185行
测试库上 10614185行 show table xxx regions 显示 有 120行

当时有没有看有没有元数据锁?
select * from mysql.tidb_mdl_view;

delete 10000行 循环删除数据还在,自动compact可能要几天时间才能清理,所以慢。
建议create 新表 like 旧表;
然后insert into 新表 select * from 旧表;
删除旧表重命名新表,再试试建索引

多谢,这是最后的方案了,现在想着要是能正常解决最好了。

没有锁

在添加索引时,执行 admin show ddl jobs 语句,当 state 在 write reorganization 阶段,ROW_COUNT 在持续增加的时候,证明在回填数据,创建索引正常,如果一直不是这状态,那就不对,查下mdl 锁吧,再不行就查日志,重启大法

我还以为是150亿行了。那估计要1小时以上了。