我正在使用SQL Server 2008 Enterprise。我曾嘗試過,如果我將SQL Server事務日誌設置爲增加相關數據庫(沒有備份設置),那麼如果同時由多個線程執行,此存儲過程的單個刪除語句將導致死鎖?任何想法爲什麼?當SQL Server事務日誌不斷增加時出現死鎖?
對於delete語句,Param1是表FooTable的列,Param1是另一個表的外鍵(引用另一個表的另一個主鍵聚簇索引列)。對於表FooTable,Param1本身沒有索引。 FooTable有另一列用作聚集主鍵,但不是Param1列。
create PROCEDURE [dbo].[FooProc]
(
@Param1 int
,@Param2 int
,@Param3 int
)
AS
DELETE FooTable WHERE Param1 = @Param1
INSERT INTO FooTable
(
Param1
,Param2
,Param3
)
VALUES
(
@Param1
,@Param2
,@Param3
)
DECLARE @ID bigint
SET @ID = ISNULL(@@Identity,-1)
IF @ID > 0
BEGIN
SELECT IdentityStr FROM FooTable WHERE ID = @ID
END
它是否真的是死鎖(一個線程被中止爲死鎖受害者),還是僅僅是一個「延遲「,直到第一個線程完成? – 2010-06-08 16:10:41
喬治,這是你第三次詢問有關同樣的僵局,從未提供過死鎖信息。沒有死鎖信息,你正在浪費你的時間。附加事件探查器,監視死鎖圖形事件類* *,等待發生死鎖,將保存的.xdl附加到您的文章。 – 2010-06-08 17:48:27
@馬克,它是僵局。我在日誌中記錄它。事務日誌之間的任何關係不斷增加和死鎖? – George2 2010-06-09 03:30:33