2012-02-10 22 views
1

我們有一個複雜的存儲過程,它首先插入INSERT,然後在特定行中執行UPDATES。理想情況下,在完成此請求後,如果用戶2碰到相同的SP並且某些選擇必須發生而不是UPDATES。 如果有多個請求在同一時間進行第一個操作,那麼我們自然會在該UPDATE上產生死鎖。WAITFOR用於SQL中的併發問題

我們正在考慮實現WAITFOR,以便SP首先在啓動之前在全局臨時表中設置一個標誌,並且如果第二個請求到來,它會等待一段時間再試一次,這樣在10秒之後它可以再試一次,如果它看到更新完成,它可以完全跳到SELECT邏輯。這種方式我們覺得沒有用戶會得到死鎖,之後說5-10秒將最終返回結果。

正在使用WAITFOR這樣的罰款或數據庫架構問題的一些可能的未來問題?

回答

0

這是一個非常冒險的想法,數據庫已經有很多設施可以讓你同時插入和更新記錄。您可以使用事務和提示來減少死鎖的風險。索引不當常常會導致大量的死鎖。

在SQL過程中實現自旋鎖通常會出錯。

我寫了一些你可以用一段時間回覆的模式:http://samsaffron.com/archive/2008/08/27/Deadlocked+