删除表中的行会导致LOCKS

Sea*_*ean 11 t-sql sql-server sql-server-2008

我正在运行以下命令从大表(1.5亿行)中批量删除行:

DECLARE @RowCount int
WHILE 1=1
    BEGIN
        DELETE TOP (10000) t1
        FROM table t1
        INNER JOIN table2 t2 ON t2.PrimaryKey = t1.PrimaryKey
        WHERE t1.YearProcessed <= 2007

        SET @RowCount = @@ROWCOUNT

        IF (@RowCount < 10000) BREAK
    END
Run Code Online (Sandbox Code Playgroud)

这个表是高度使用的.但是,它正在删除记录,但它也会导致某些记录的锁定,从而给用户带来错误(在我们所处的环境中这是不可接受的).

如何在不导致锁定的情况下删除旧记录?我应该将批量的大小从10000记录减少到1000吗?这将如何影响日志大小(我们只有很少的硬盘空间用于大对数增长).

有什么建议?

小智 7

我在过去看到类似的零星问题,即使是小批量的5000个记录,锁定仍然会发生.在我们的例子中,每个删除/更新都包含在它自己的Begin Tran ... Commit循环中.纠正问题,逻辑

等待延迟'00:00:00:01'

被放置在每个循环的顶部并且纠正了问题.