【问题标题】:Managing deletion on a large production SQL database管理大型生产 SQL 数据库的删除
【发布时间】:2025-12-31 21:45:01
【问题描述】:

我们有一个大型 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

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

【问题讨论】:

    标签: python sql sql-server stored-procedures pyodbc


    【解决方案1】:

    是的,这是完全可行的。我们在我现在的商店和我之前的两个商店中做了类似的事情(自 2005 年开始提供 windows 功能)。

    【讨论】: