我有2个以上的过程,每周3点通过SQL代理作业运行。所以这两个过程都会同时开始执行。
proc“dbo.Proc1”在几秒钟内失败:“事务(进程ID 46)在锁资源上与另一个进程陷入僵局,并被选为死锁牺牲品。重新运行该事务。” 但是proc“dbo.Proc2”成功运行。
任何人都可以帮我解决这个死锁问题吗?感谢。
ALTER PROCEDURE dbo.Proc1
AS
BEGIN
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
/* SELECT statements here that take ~20 minutes to return data */
/* The base table here is dbo.Table1, which is a huge table */
END
ALTER PROCEDURE dbo.Proc2
AS
BEGIN
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
/* SELECT statements here that take ~20 minutes to return data */
/* The base table here is dbo.Table1, which is a huge table */
END
我更喜欢这里的脏读,因为它是一种总结报告,不需要是最新的。当这些运行@ 3am时,没有其他事情发生 - 即没有人访问同一个数据库...这只是内部应用程序。
我很困惑,为什么它会导致死锁,即使它是脏读的!