变更字段类型非常慢

【 TiDB 使用环境】生产环境
【 TiDB 版本】v5.1.0
【复现路径】修改表字段类型
【遇到的问题:问题现象及影响】
通过alter table xxx modify column修改字段类型,由int改为varchar,表数据1.7亿,用时大概2.5h,集群是按官方文档搭建的标准部署,3台tidb,3台pd,3台tikv。
有什么方法可以提升速度么?

我亲爱的达瓦里氏,
你可以升级到6.5玩玩 :face_with_peeking_eye: :face_with_peeking_eye: :face_with_peeking_eye: :face_with_peeking_eye:

那个1.7亿,2.5小时就是在6.5.3里得出的,现在要搞5.1.0的。 :joy:

坐等结果,看比6.5慢多少 :thinking:

:astonished:2.5小时都完全接受不了~btw,变更字段类型的时候,会锁表么?

ddl不阻塞DML,但可能会破坏事务。

1 个赞

:rofl:破坏事务这个接受不了~

这种改法,类似全表更新了,肯定慢了

那我考虑新建表重新导数据吧。

没有可以加速的参数么?

1 个赞

你5.1应该会阻塞后边的dml操作 不会阻塞dml,但是5.1事务会提交失败,
好像是从6.5开始有了元数据锁,就不会阻塞dml了,但是可能会延长你ddl的操作时间
具体得翻翻官档的元数据锁

https://docs.pingcap.com/zh/tidb/v5.1/system-variables#tidb_ddl_reorg_batch_size
https://docs.pingcap.com/zh/tidb/v5.1/system-variables#tidb_ddl_reorg_worker_cnt
这俩参数吧,都是调整 re-organize 阶段的并发度的,应该能提高点速度

看上去都不能白天操作~蓝瘦~

1 个赞

我去翻翻看看

1 个赞

看了下,没有元数据锁的时候,也就是5.1,也不会阻塞后边的dml,但是事务会提交失败 :upside_down_face:

:joy:放弃了,直接重建表导数据吧

1 个赞

想不影响业务只能半夜搞了 又可以加班了

主要是一晚上搞不完,所以想看看有没有加速方式

1 个赞

其实没办法

没办法的,变更类型需要把数据全部load到tidb再回写回去,肯定慢。可以实时查看ddljob,admin show ddl_jobs 看下实时进度。

出乎意料,升级v6.5.3之后,加索引竟然很快。感觉modify column应该也会很快

1 个赞