我們能否避免死鎖通過不同的工藝如何避免死鎖而多發的過程中SQL對同桌工作
例如創建不同的數據庫用戶一個用戶與API'ABC'進行通信,另一個用戶與API'PQR'以及其他用戶進行通信以處理API'ABC'和'PQR'帶來的系統數據?所有這些用戶將處理相同的表格。
我們能否避免死鎖通過不同的工藝如何避免死鎖而多發的過程中SQL對同桌工作
例如創建不同的數據庫用戶一個用戶與API'ABC'進行通信,另一個用戶與API'PQR'以及其他用戶進行通信以處理API'ABC'和'PQR'帶來的系統數據?所有這些用戶將處理相同的表格。
就個人而言,您可以將一個時間戳列添加到表中,以便在多個用戶同時更新行時幫助維護數據庫的完整性。您可能還想知道有多少行和更新了哪些行,而無需重新查詢該表。
CREATE TABLE MyTest (myKey int PRIMARY KEY, myValue int, RV rowversion);
然後,你就可以使用下面的示例Transact-SQL語句執行更新過程中的[表名稱]表樂觀併發控制。
DECLARE @t TABLE (myKey int);
UPDATE MyTest
SET myValue = 2
OUTPUT inserted.myKey INTO @t(myKey)
WHERE myKey = 1
AND RV = [row-version-value];
IF (SELECT COUNT(*) FROM @t) = 0
BEGIN
RAISERROR ('error changing row with myKey = %d'
,16 -- Severity.
,1 -- State
,1) -- myKey that was changed
END;
死鎖發生,因爲相同的資源(表,索引,行等),SQL服務器並不關心誰是會話的所有者,也可以是有多個相同的用戶不同的作戰會議會話或多個用戶。因此,僅僅爲了避免死鎖而創建多個用戶是無濟於事的。
東西,可以幫助.....
看一看這個Minimizing Deadlocks
它可能不適合所有情況,但我們嘗試處理存儲過程中的處理邏輯並使用'sp_getapplock'來防止同時使用過程事務。
從你寫的內容來看,我不確定這是死鎖嗎?鎖定數據庫是非常正常的。 – Leonidas199x
在不同的進程中同時出現死鎖會更容易嗎?因爲你無法控制鎖定的順序。也許你可能想首先檢查這個頁面:[最小化死鎖](https://technet.microsoft.com/en-us/library/ms191242(v = sql.105).aspx) – Prisoner