我正在运行以下命令从大型表(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
这张桌子的使用率很高。然而,它正在删除记录,但它也会导致某些记录被锁定,从而向用户抛出错误(这在我们所处的环境中是不可接受的)。
如何删除较旧的记录而不导致锁定?我应该将批次大小从 10000 条记录减少到 1000 条吗?这将如何影响日志大小(我们只剩下很少的硬盘空间来容纳大量日志增长)。
有什么建议么?
我过去见过类似的零星问题,即使是小批量 0f 5000 条记录,锁定仍然会发生。在我们的例子中,每个删除/更新都包含在其自己的 Begin Tran...Commit 循环中。为了纠正这个问题,逻辑
等待延迟'00:00:00:01'
被放置在每个循环的顶部并纠正了问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)