2015-08-15 61 views
0

我的asp.net WEB API應用程序處理請求。每個請求都可以對數據庫進行多次調用。 同一用戶可以呼叫來自不同IP地址的請求。MS SQL Server - 使用事務處理霧化操作

我需要開發針對用戶的請求等待鏈,使同一個用戶的請求將等待前一個請求完成。

以前我通過運行在一個事務範圍的要求使得它: 隔離級別= ReadCommited爲了鎖定該行以DB更新用戶排記錄 第一個請求,讓其他請求應該在這裏等着,而先前的事務中運行。

i之後由具有多個不同的用戶,在同一時間不相同的負荷試驗中,我想通了,它們在某種程度上dealocking海誓山盟:

事務(進程ID 119)中的死鎖的鎖資源與另一個進程並被選爲死鎖受害者。重新運行交易。

我的問題是:這將是我的情況,制定一個用戶級等待鏈的應用要求最好的方法?

預先感謝您!

+0

你想放棄你的方法。相反,你應該修復bug(死鎖)。另一方面,使用數據庫鎖作爲隊列不是完全可擴展的。同時會有多少個排隊請求? – usr

回答

0

如果你說I need to develop wait chain for requests,你爲什麼不使鏈?您可以接收所有請求,將它們存儲在任何隊列(或數據庫)中,然後逐個處理它們。

爲了達到THI與交易,你必須非常小心,並按照一些規則來minimize deadlocks

  • 訪問對象以相同的順序
  • 保持事務簡短
  • 使用綁定連接

Som修改您的代碼,使用數據庫進行操作。

+0

這也是一個選項。但我想知道是否有一個很好的方法來實現我的sql交易目標。 –

+0

@OlexanderKorenyuk更新了答案 – Backs