SQL Server死鎖的話題已經被討論了很多次,但是我不確定甚至兩個表上的同時插入最終會導致死鎖情況。在表中插入行時發生SQL Server死鎖
場景: 在測試我們的應用程序(SQL Server 2005作爲後端,ASP.net 3.5)時,我們同時向表中插入記錄(簡化概述),導致超過70%的用戶出現死鎖。 因爲這不是多資源的情況,所以我無法理解這是因爲插入是如何死鎖的。在詳細分析(由兩個用戶重現錯誤)後,我發現兩個進程都在表的主鍵索引上持有RangeS-S鎖,並試圖將其轉換爲RangeI-N鎖,導致出現死鎖和一項交易被殺害。
問題: 我們可以避免或減少這些類型的死鎖,因爲這不是資源訪問順序改變的情況嗎?不能'我們強迫事務最初獲得排他鎖,以便阻止其他進程並避免死鎖?可能有什麼(不利)影響? 也有人可以解釋更多關於RangeI-N鎖。
這是「可串行化」的隔離級別。
任何建議都會有幫助。
感謝, 拉夫
您是否需要'Serializable'級別?您的交易是否也在執行「SELECT」? SQL語句是什麼樣的? – 2010-10-15 18:08:25
SQL是一個簡單的存儲過程,用於插入一對夫婦或內置在sql函數中的行。當我們調用ADO.NET中的存儲過程時,會自動使用「可序列化」級別 – Gaurav 2010-10-15 18:21:09