转换非常大的SQL Server表的最快方法

转换非常大的SQL Server表的最快方法,sql,sql-server,database,sql-server-2012,Sql,Sql Server,Database,Sql Server 2012,我们正在SQL Server 2012中重新设计一个非常大(约100Gb,分区)的表 为此,我们需要将旧(现有)表中的数据转换为生产服务器上新设计的表。新表也进行了分区。行仅附加到表中 问题是很多用户都在这台服务器上工作,我们只能在服务器负载不重的情况下(每天几个小时)分块完成转换过程 我想知道是否有更好更快的方法 这一次,我们将在几天内完成转换过程(然后切换应用程序以使用新表),但是如果表是1Tb,我们会怎么做?还是10 TB PS.有关当前流程的更多详细信息: 这些表根据CloseOfBus

我们正在SQL Server 2012中重新设计一个非常大(约100Gb,分区)的表

为此,我们需要将旧(现有)表中的数据转换为生产服务器上新设计的表。新表也进行了分区。行仅附加到表中

问题是很多用户都在这台服务器上工作,我们只能在服务器负载不重的情况下(每天几个小时)分块完成转换过程


我想知道是否有更好更快的方法

这一次,我们将在几天内完成转换过程(然后切换应用程序以使用新表),但是如果表是1Tb,我们会怎么做?还是10 TB

PS.有关当前流程的更多详细信息:
这些表根据CloseOfBusinessDate列(日期)进行分区。当前,我们在服务器处于低负载时运行此查询:

INSERT INTO
  NewTable
...
SELECT ... FROM
  OldTable -- this SELECT involves xml parsing and CROSS APPLY
WHERE
  CloseOfBusinessDate = @currentlyMigratingDate
每天,旧表中约100万行被转换为新表中的2亿行。

当我们完成转换过程后,我们将简单地更新应用程序以使用NewTable。

所有花时间阅读问题并试图帮助我的人,对不起,我自己没有足够的详细信息。从旧表中选择数据并进行转换的查询速度非常慢(多亏了@Martin Smith,我决定检查SELECT查询)。查询涉及解析xml&使用交叉应用。我认为在我们的情况下,更好的方法是编写一个小应用程序,它只需每天从旧表加载数据,在内存中转换数据,然后使用大容量复制插入到新表中。

这取决于初始模式和目标模式。是否将一个表转换为多个表?您正在更改分区方案吗?分区是手动的还是自动的?行是仅追加到表中,还是也被更新和/或删除?是否可以通过将一个表包装到视图中,使其“显示为”另一个表?您的问题目前太广泛,请提供您正在进行的更改的具体细节,我们可以提供具体建议。使用SP_重命名可能会奏效。将现有表命名为某物,在其后面加上_OLD,将新表更改为生产名称,并确保所有FK都已计算在内。“我想知道是否有更好更快的方法”。可能地因为我们不知道您现有的代码是什么样子,我们怎么知道呢?如果没有更新或删除,只在表的末尾插入,那么一次迁移一个分区(或分区的一部分)应该意味着您的迁移活动不会阻止任何其他用户进程?如果没有更具体的细节,这就像是问“如果我仍然需要它来工作,什么是修理我的车的最佳方式?”但没有告诉我们你如何使用它来工作,你在做什么修理,等等…仍然没有太多的细节。SELECT的执行计划是否优化?您是否在插件上获得最少的日志记录?文件是否预增长到足够的容量?