gpt4 book ai didi

sql-server - 删除表中的行会导致 LOCKS

转载 作者:行者123 更新时间:2023-12-02 09:31:22 26 4
gpt4 key购买 nike

我正在运行以下命令从大型表(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

这张表的使用率很高。然而,它在删除记录的同时,也会导致某些记录被锁定,从而向用户抛出错误(这在我们所处的环境中是 Not Acceptable )。

如何删除较旧的记录而不导致锁定?我应该将批处理大小从 10000 条记录减少到 1000 条吗?这将如何影响日志大小(我们只剩下很少的硬盘空间来容纳大量日志增长)。

有什么建议吗?

最佳答案

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

等待延迟“00:00:00:01”

被放置在每个循环的顶部,从而纠正了问题。

关于sql-server - 删除表中的行会导致 LOCKS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8999433/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com