使用 SQL 服务器作为源时的 AWS DMS 限制 - 复制信息超过 8000 字节的行
AWS DMS limitation when using SQL Server as a source - replicating rows with more than 8000 bytes of information
我正在考虑在 Amazon RDS 中创建一个只读数据库,使用他们的 DMS 从现场数据库复制数据。在 Amazon DMS 的一般限制列表中,其中一项是:
Changes to rows with more than 8000 bytes of information, including header and mapping information, are not processed correctly due to limitations in the SQL Server TLOG buffer size.
这适用于什么情况?我的印象是 table 每行最多可以包含 8,060 个字节。我了解 varchar
、nvarchar
、varbinary
、sql_variant
或 CLR 用户定义类型被推入另一行并在其位置放置一个指针。是指这个吗?我试图了解会发生这种情况的任何情况。
此外,我如何确定哪些 table 会受到影响?
好的,看来我现在可以回答我自己的问题了,至少在一个用例中是这样。
这与组合列的可能大小无关,但如前所述,与其中的数据量有关。创建一个带有 id 和 9 个 varchar(1000) 列的 table。用 1000 字节填充前 8 个字节,然后按原样复制所有内容。用数据填充剩余的列,并且不会复制更新(大概是因为列数据被推离页面)。奇怪的是,varchar(max) 似乎并没有受到这种影响。
要定位table行受此影响,运行以下,注意MaximumRecordSize列:
dbcc showcontig with tableresults
解决该问题的一种方法是将有问题的 table 拆分为较小的相关 table(a.k.a 对其进行规范化),然后执行连接以检索数据。这可能可行也可能不可行,具体取决于您的数据库大小。
我正在考虑在 Amazon RDS 中创建一个只读数据库,使用他们的 DMS 从现场数据库复制数据。在 Amazon DMS 的一般限制列表中,其中一项是:
Changes to rows with more than 8000 bytes of information, including header and mapping information, are not processed correctly due to limitations in the SQL Server TLOG buffer size.
这适用于什么情况?我的印象是 table 每行最多可以包含 8,060 个字节。我了解 varchar
、nvarchar
、varbinary
、sql_variant
或 CLR 用户定义类型被推入另一行并在其位置放置一个指针。是指这个吗?我试图了解会发生这种情况的任何情况。
此外,我如何确定哪些 table 会受到影响?
好的,看来我现在可以回答我自己的问题了,至少在一个用例中是这样。
这与组合列的可能大小无关,但如前所述,与其中的数据量有关。创建一个带有 id 和 9 个 varchar(1000) 列的 table。用 1000 字节填充前 8 个字节,然后按原样复制所有内容。用数据填充剩余的列,并且不会复制更新(大概是因为列数据被推离页面)。奇怪的是,varchar(max) 似乎并没有受到这种影响。
要定位table行受此影响,运行以下,注意MaximumRecordSize列:
dbcc showcontig with tableresults
解决该问题的一种方法是将有问题的 table 拆分为较小的相关 table(a.k.a 对其进行规范化),然后执行连接以检索数据。这可能可行也可能不可行,具体取决于您的数据库大小。