DTS迁移多text字段时出现Row size too large的错误

    本周DTS一个增量迁移任务出现一个很诡异的问题,之所以说诡异是因为DTS已经为该用户的库同步了很长一段时间的增量数据(数据量在15G+),今天突然出现了这个问题:

DTS迁移多text字段时出现Row size too large的错误

    从异常的信息大致可以推测出出错的原因是新插入的一行数据需要存储在数据页的实际数据长度大于一个数据页的长度(8126).所以首先对比了一下源表和目标表的数据结构(可能是两边的表结构不一致导致的),两边的表结构是一致的,但却是定义了许多Text类型的大字段而已

DTS迁移多text字段时出现Row size too large的错误

    然后查询了两边的innodb_file个配置,源库:

DTS迁移多text字段时出现Row size too large的错误

     目标库:

DTS迁移多text字段时出现Row size too large的错误

    这样一看出错的原因就一目了然了.简单解释一下,Barracuda对应row_format(dynamic, compress),其中dynamic下text的所有内容都是off-page存放的;Antelope 对应row_format(compact, redundant),其中compact下的text是存786B在row中,超过部分存在off-page.所以要解决问题就必须将innodb_file的给是改成Barracuda与源库一致,当这并不能马上解决问题,因为innodb表的存储格式在创建时已经确定了,那么就只能重建表了.为跟用户确认目标库无业务写入的情况下通过create table * select * ,insert into * select 以及rename在目标库重建了该表,之后就完美解决了.

上一篇:数据传输(DTS):云服务商的区域故障不再是噩梦


下一篇:数据传输DTS支持SQLServer不停机迁移