提高SQL SERVER併發能力

iSQlServer發表於2010-11-23
 從MSDN看到這樣一個解決方案:SET TRANSACTION ISOLATION LEVEL

 

首先,設定資料庫的事務隔離級別為 只讀快照:READ_COMMITTED_SNAPSHOT

設定READ_COMMITTED_SNAPSHOT隔離模式很簡單,只要我們簡單的一步操作就可以實現。
 
ALTER DATABASE DATABASE_NAME
SET READ_COMMITTED_SNAPSHOT ON;

READ_COMMITTED_SNAPSHOT的強項在於查詢的時候不會下鎖,影響別的事務操作,而且可以保障查詢的資料滿足絕大多數的精確要求。

這裡牽涉到的另一個問題是,有的更新過程,需要對某些關鍵資料行進行鎖定,以避免重入導致的資料更新錯誤,比如財務帳戶資訊。

比如,在一個儲存過程中,使用TIMESTAMP型別欄位作為行更新的依舊,在快照模式下,就會引發錯誤導致更新失敗。

MSDN提供了一個這樣的解決方案:

當 READ_COMMITTED_SNAPSHOT 資料庫選項設定為 ON 時,您可以使用 READCOMMITTEDLOCK 表提示為 READ COMMITTED 隔離級別上執行的事務中的各語句請求共享鎖,而不是行版本控制。

那我們完全在這種更新事務中,使用如此共享鎖:

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gtupdate A with(READCOMMITTEDLOCK) set CASH= yy_AMT+@M_CAMT where UID = @U_ID and TIME_STAMP=@TS;

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-679380/,如需轉載,請註明出處,否則將追究法律責任。

相關文章