我们正在重新设计SQL Server 2012中一个非常大的(~100Gb,分区)表。
为此,我们需要将旧(现有)表中的数据转换为生产服务器上新设计的表。新表也是分区的。行仅附加到表中。
问题是很多用户在这个服务器上工作,我们只能在块中和服务器没有负载(一天几个小时)的情况下完成这个转换过程。
我想知道是否有更好更快的方式?
这次我们将在几天内完成转换过程(然后切换我们的应用程序以使用新表),但如果表是1Tb我们会怎么做?还是10Tb?
PS。有关当前流程的更多详细信息: 这些表根据CloseOfBusinessDate列(DATE)进行分区。目前,我们在服务器处于低负载时运行此查询:
INSERT INTO
NewTable
...
SELECT ... FROM
OldTable -- this SELECT involves xml parsing and CROSS APPLY
WHERE
CloseOfBusinessDate = @currentlyMigratingDate
每天从旧表中大约1M行转换为新表中的200M行。 完成转换过程后,我们只需更新我们的应用程序即可使用NewTable。
每个人都花时间阅读这个问题并试图帮助我,对不起,我自己没有足够的细节。原来从旧表中选择数据并转换它的查询非常慢(感谢@Martin Smith我决定检查SELECT查询)。该查询涉及解析xml并使用交叉应用。我认为在我们的情况下更好的方法是编写一个小应用程序,只需每天从旧表中加载数据,将其转换为内存,然后使用批量复制插入新表。