2010-08-30 79 views
2

我正在寻找解决死锁问题的方法。我想我知道是什么原因造成的,但我不确定确切的事件。以下SQL语句是否会导致死锁?

我们有一个长期运行的观点(几秒钟)。我们正在更新在该视图中使用的其中一个表格。更新也可能需要几秒钟的时间。当引发死锁错误时正在运行的更新语句连接到视图。例如:

UPDATE t1 SET 
    Field1 = 'someValue' 
FROM Table1 t1 
JOIN TheView v ON v.TableId = t1.TableId 
WHERE v.Condition = 'TheCondition' 

似乎已得到关闭的原因僵局的说法是这样的:

SELECT * FROM TheView 

,其视图被定义为:

CREATE VIEW TheView AS 
    SELECT * 
    FROM Table1 t1 
    JOIN Table2 t2 ON t2.foo = t1.foo 

我相当肯定会发生死锁,因为视图和更新语句都依赖于Table1。这种情况可能吗?

谢谢

回答

1

您是否尝试过使用SQL Profiler? Profiler会准确地告诉你哪些语句涉及到死锁,并且包括每个进程已锁定的资源,以及其他进程需要的资源等。