如何将来自MySQL的40亿条记录一次性加载到SQL Server中

6
我们需要将一个拥有40多亿记录的表从源MySQL(5.5)复制到目标SQL Server (2014),以进行初始数据复制。这个表比较宽,有55列,但没有LOB列。我们正在寻找最高效的数据复制方式。
我们尝试使用Attunity Replicate进行加载(对于不是那么大的表格,这个方法很有效),但是如果Attunity Replicate在初始数据复制时失败了,那么就会重新开始...浪费之前用来复制数据的时间。由于补丁和这个表可能需要3个月以上的加载时间,Attunity不能成为解决方案。
我们也尝试过通过链接服务器进行更小批量的加载。虽然运行正常,但并不高效。
一旦数据被复制,我们将使用Attunity Replicate处理CDC。

2
你可以尝试使用SSIS。这个表有多大,以GB为单位?确保在初始加载期间,该表可以进行批量加载。https://learn.microsoft.com/en-us/sql/relational-databases/import-export/prerequisites-for-minimal-logging-in-bulk-import?view=sql-server-2017 - Piotr Palka
我建议也尝试使用 SSMA。由于表的大小,它可能是更好的选择之一。 - Matt
Attunity在传输过程中由于连接问题而导致失败。这种故障已经发生了1周、1个月等,因此它与源/目标转换问题无关。 - Cody Brumett
所涉及的表的大小为1.2TB。它还具有枚举列,因此我不知道SSMA是否有效。是否有人在使用ado.net与通过SSIS ETL连接器进行odbc连接时取得了更大的成功,处理如此庞大的数据? - Cody Brumett
嗨,你可以尝试使用Hadoop的MapReduce。作为分布式系统,它可以让你非常快速地处理大量数据。 - Andrei Petrut
显示剩余2条评论
3个回答

1
对于这样的任务,我认为SSIS是最简单的选择。它专门设计用于大型插入操作,可以达到1TB的数据大小。事实上,我建议阅读MSDN文章We loaded 1TB in 30 Minutes and so can you
像删除索引和进行其他优化(如分区)这样的简单操作可以加快加载速度。虽然30分钟不是一个可行的目标时间,但在非工作时间运行SSIS包将是一个非常直接的任务。
我的公司没有像你们这样大规模的负载,但我们每晚都要刷新超过1亿条记录,即使数据库性能较差,也不需要超过45分钟。

0

加载大量数据的最有效方法之一是按块读取它们。

我已经回答了许多关于SQLite、Oracle、Db2和MySQL的类似问题。您可以参考其中一个来获取有关如何使用SSIS进行操作的更多信息:

另一方面,还有许多其他建议,例如在目标表中删除索引并在插入后重新创建它们,在源表上创建所需的索引,使用快速加载选项插入数据...


-1

在服务器上部署SSIS包并在那里执行它将在几分钟内解决问题!


请不要将“感谢”作为答案。它们实际上并没有回答问题,而且可能会被未来的访问者视为噪音。一旦您获得足够的声望,您就可以获得投票答案的特权。这样,问题的未来访问者将在该答案上看到更高的投票数,并且回答者也将获得声望积分的奖励。请参见“为什么投票很重要”。(感谢此答案。) - Adriaan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接