【问题标题】:Best way to purge multi million data in SQL Server [closed]在 SQL Server 中清除数百万数据的最佳方法 [关闭]
【发布时间】:2016-06-21 15:15:54
【问题描述】:

我在过去 5 年的 SQL Server 中有大约 100 亿个系统(基础设施)数据,我想在每个周末逐步清除这些数据,同时其他工作也在运行,这些工作在特定日期进行维护和插入数据进入warehouse

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

请提出一个最佳的方法。

【问题讨论】:

  • 您是否根据日期清除记录?
  • 这就是分区的用途(或者,至少是使用它们的一个原因)
  • 最好对该表进行分区。然后每周一个脚本为下一周创建一个新分区,并删除过时一周的分区。
  • 是的,我正在根据日期清除数据,还尝试了表分区

标签: sql sql-server sql-job


【解决方案1】:

SQL Server 中的分区切换使您可以几乎瞬间将数据块交换进/出表。好教程很多,这里有一个:https://www.brentozar.com/archive/2013/01/sql-server-table-partitioning-tutorial-videos-and-scripts/

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

如果您没有 SQL Server 企业版,则应确保您用于识别要删除的记录的字段已编入索引。对于大量删除,分解删除可以提高性能,因此也许您创建一个循环,一次删除 1 天,7 次,而不是一次删除整个星期。

【讨论】:

    【解决方案2】:

    我会采取文章中提到的增量方法:

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

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

    【讨论】:

    • 还需要注意日志文件的大小,如果我们一次性批量删除记录,将会填满转录日志表。
    • 是的。您多久进行一次事务日志备份?
    猜你喜欢
    • 2019-02-15
    • 2012-01-07
    • 1970-01-01
    • 2020-04-17
    • 2013-01-12
    • 2020-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多