代码之家  ›  专栏  ›  技术社区  ›  JoshGoodnow

管理大型生产SQL数据库上的删除

  •  0
  • JoshGoodnow  · 技术社区  · 6 年前

    我们有一个大型SQL生产数据库(~ 1TB),需要定期对其进行修剪并保持合理的大小。(即,每周都会修剪最旧的一周数据,以便我们始终有X周的数据)但是,此数据库非常活跃,任何大型SQL操作都会破坏我们产品的性能。我已经编写了一个带有一个小pyodbc包装器的存储过程,用于将删除分块到更小、可管理的操作中。

    ALTER PROCEDURE [dbo].[PurgeTickerHistory]
    @Start bigint = 0, 
    @End bigint = 0,
    @ChunkSize int = 10000
    AS
    BEGIN
    SET NOCOUNT ON;
    declare @r int = 1;
    
    
    while @r > 0
    begin
        delete top(@ChunkSize)
            from dbo.TickerHistory
            where [Timestamp] < @Start and [Timestamp] > @End
    
        set @r = @@ROWCOUNT
    end
    
    end
    

    这是一种完全可行的方式吗?或者,是否有“更好”的方法以更高效/更安全的方式完成我正在做的事情?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Tab Alleman    6 年前

    是的,这是完全可行的。我们在我目前的店铺和我之前的两个店铺都做了类似的事情(自2005年起,windows功能可用)。