【 TiDB 使用环境】生产环境
【 TiDB 版本】v5.1.0
【复现路径】修改表字段类型
【遇到的问题:问题现象及影响】
通过alter table xxx modify column修改字段类型,由int改为varchar,表数据1.7亿,用时大概2.5h,集群是按官方文档搭建的标准部署,3台tidb,3台pd,3台tikv。
有什么方法可以提升速度么?
我亲爱的达瓦里氏,
你可以升级到6.5玩玩
那个1.7亿,2.5小时就是在6.5.3里得出的,现在要搞5.1.0的。
坐等结果,看比6.5慢多少
2.5小时都完全接受不了~btw,变更字段类型的时候,会锁表么?
ddl不阻塞DML,但可能会破坏事务。
1 个赞
破坏事务这个接受不了~
这种改法,类似全表更新了,肯定慢了
那我考虑新建表重新导数据吧。
没有可以加速的参数么?
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,但是事务会提交失败
放弃了,直接重建表导数据吧
1 个赞
想不影响业务只能半夜搞了 又可以加班了
主要是一晚上搞不完,所以想看看有没有加速方式
1 个赞
其实没办法
没办法的,变更类型需要把数据全部load到tidb再回写回去,肯定慢。可以实时查看ddljob,admin show ddl_jobs 看下实时进度。
出乎意料,升级v6.5.3之后,加索引竟然很快。感觉modify column应该也会很快
1 个赞