我们有一个维护存储过程 (SQL Server 2005),它从我们的日志表中删除数据。
我们希望避免阻塞,因为我们的日志表被复制到报告服务器。
我可以做些什么来调整查询以防止阻塞?
在以后的 sql server 版本中将无法使用 nolock 执行 DELETE:http://msdn.microsoft.com/en-us/library/ms187373.aspx
请注意,维护程序每周运行一次,可能会删除数千行(或数百万行,如果我们启用详细日志记录)。
最佳答案
我发现最好的方法是使用循环来小批量删除。根据数据库及其负载,我一次完成了 100 到 10,000 行。
while (1=1) begin
delete top(1000)
from YourTable
where ...
if @@rowcount < 1000 break
end /* while */
关于sql-server - 维护存储过程——如何在不阻塞复制的情况下删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4169283/