在SQL Server中清除数百万数据的最佳方法

问题描述:

过去5年我在SQL Server中有大约100亿系统(基础结构)数据,并且我想在每个周末增量清除该数据,同时其他正在运行的其他作业维护并将该特定日期的数据插入warehouse在SQL Server中清除数百万数据的最佳方法

清除过程每周末将删除大约600,000条记录,但它会扫描整个数据仓库以取出这600,000条记录。

请建议一个这样做的最佳方式。

+0

您是根据日期清除记录吗? –

+0

这是分区的用途(或者至少有一个使用它们的原因) – Jamiec

+0

这可能是最好的,如果该表将被分区。然后每个星期一个脚本为下一周创建一个新的分区,并删除过时的分区。 – LukStorms

在文章中提到我会采取渐进的方法:

http://sqlperformance.com/2013/03/io-subsystem/chunk-deletes

记录每批删除的号码是可配置的。您需要在测试环境中测试不同的大小以获得数据集的最佳大小。

+0

还需要照顾日志文件的大小,如果我们一次性批量删除记录它将完整的转录日志表。 –

+0

确实。您多久进行一次事务日志备份? –

SQL Server中的分区切换使您能够立即交换表中数据的大块数据。有很多好的教程,这里有一个:https://www.brentozar.com/archive/2013/01/sql-server-table-partitioning-tutorial-videos-and-scripts/

SQL Server中的分区根据分区方案物理分隔表,最常用的是日期范围。因此,将分区换入/换出表格更像是一个逻辑交换机,而不是物理交换机,因此速度非常快。

如果您没有SQL Server Enterprise Edition,则应确保您用于标识要删除记录的字段已建立索引。在删除大量数据后,打破删除可以提高性能,因此您可能会创建一个循环,一次删除7天,而不是整个星期一次。