表文件450G,增加字段ADD COLUMN createTime DATETIME DEFAULT CURRENT_TIMESTAMP,两套库执行时间明显差别,第一套1秒完成,第2套42分钟完成,请问这可能是什么问题导致的呢
两套TiDB版本和数据库参数配置是否一致,第二套库的CPU、内存、磁盘I/O及网络使用情况和第一套是分有比较大的区分;大表添加字段,如果不带默认值,应该不会慢的
添加字段很快,只是修改元数据
在 TiDB 中为大表添加带有默认值(如 CURRENT_TIMESTAMP)的字段时,操作本质是「修改元数据 + 隐式数据重写」的结合。看是不是有逻辑回填
哦哦,这个场景没试过。目前只知道有加索引和类型转换会涉及逻辑回填
第二套库是不是被其他 ddl 阻塞了。
admin show ddl jobs 1000 where table_name=‘xxx’;
通过这个 sql 查一下你 add column 的表的 ddl 执行情况。
你加了本质上就是修改数据了,纯靠修改元数据肯定不行了,1秒完成的库什么版本
是否事务冲突?生产环境肯定有人在使用,如果有大量并发事务正在对目标表进行写入操作,可能会导致ADD COLUMN操作需要等待以避免事务冲突,从而延长执行时间。而测试环境一般用于验证,添加字段时业务人员没有操作,所以最好生产环境没有业务操作时添加字段看看时间差异
感觉本质上相当于update语句吧。