mysql - 如何一次性加载 40 亿条记录,从 MySQL 到 SQL Server

标签 mysql sql-server ssis etl attunity

我们需要在一个有 4+ 十亿条记录的表上进行初始数据复制,以从源 MySQL (5.5) 到目标 SQL Server (2014)。有问题的表非常宽,有 55 列,但是它们都不是 LOB。我正在寻找以尽可能最有效的方式复制这些数据的选项。

我们已经尝试通过 Attunity Replicate 进行加载(这对于没有这么大的表非常有效)但是如果使用 Attunity Replicate 的初始数据复制失败,那么它会从头开始......失去复制数据所花费的任何时间。打补丁和此表可能需要 3 个月以上的时间来加载 Attunity 并不是解决方案。

我们还尝试使用链接服务器进行较小的批量加载。这是有效的,但似乎根本没有效率。

复制数据后,我们将使用 Attunity Replicate 来处理 CDC。

最佳答案

对于这样的事情,我认为 SSIS 是最简单的。它专为大至 1TB 的大型插入而设计。事实上,我推荐这篇 MSDN 文章 We loaded 1TB in 30 Minutes and so can you .

做一些简单的事情,比如删除索引和执行其他优化,比如分区会让你的加载速度更快。虽然 30 分钟不是一个可行的时间,但让 SSIS 包在工作时间之外运行将是一项非常简单的任务。

我的业务没有您那么大的负载,但我们确实每晚刷新超过 100M 的数据库,这不会超过 45 分钟,即使优化不佳也是如此。

关于mysql - 如何一次性加载 40 亿条记录,从 MySQL 到 SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56139308/

相关文章:

sql-server - 派生列中的 SSIS 日期为 yyyy-mm-dd 格式

sql-server - 如何在 SSIS 中创建日志文件

mysql - 获取 MySQL 中受影响的行数

php - 更新时间戳php mysql数据库

php - 如何根据另一个表中的内容使用sql语句选择某些行

sql - 如何执行 INSERT 以便仅插入有效的数据行并忽略无效的数据行?

ssis - SSIS-即使在Foreach循环容器中的内部任务失败后,仍继续包流

mysql - Laravel INSERT 查询添加不相关的列,导致查询失败

MySQL - 点赞 + 加入

sql - 计算在行类型 2 日期之间找到行类型 1 的次数