sql-server - 维护存储过程——如何在不阻塞复制的情况下删除

标签 sql-server sql-server-2005 maintenance

我们有一个维护存储过程 (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/

相关文章:

sql-server - SQL 中减少行大小并没有减少表大小

refactoring - 您如何维护劣质代码库?

java - Tomcat:显示Web应用程序的维护页面

sql-server - 选择表中的旧记录

sql - "where (ParamID = @ParamID) OR (@ParamID = -1)"是 sql 选择的一个好习惯吗

sql-server - SQL Server 2005 查询使用 ?这在 SQL Server 2012 中不起作用

sql-server-2005 - DateDiff 上的 SQL 性能

java - 如何查明网页中任何元素的基础页面代码?

sql-server - SQL Server查询从每个子组中选择1

c# - 在带有文本参数的存储过程中是否可以进行 sql 注入(inject)?