在使用行计数删除查询时进入死锁


Set rowcount 50000
declare @i int 
select @i = 1 
 WHILE ( @i > 0 )
    BEGIN
    DELETE table1
    FROM table1 (index index1)
    WHERE
    HIST_Timestamp < '2011/11/26'
    select @i = @@rowcount
    END

查询有时会遇到死锁而终止。不知道出了什么问题…请帮帮我!

当事务A锁定了一条记录,然后必须等待事务B解锁一条记录,而事务B正在等待已被事务A锁定的记录时,就会发生死锁。

如果你真的想知道死锁发生的原因,你可以用这个命令:sp_configure "print deadlock information", 1

为查询创建一个有用的index,允许delete语句使用页锁或行锁,从而提高对表的并发访问。如果无法为删除事务创建index,则可以在游标中执行该操作,并使用频繁提交事务语句来减少页锁的数量。

最新更新