2018年4月16日 星期一

避免長時間的 select lock table 造成 insert or update blocking

啟用資料庫的讀取認可快照選項 (避免select lock)

ALTER DATABASE xxx SET READ_COMMITTED_SNAPSHOT ON

啟用資料庫的快照集隔離選項 (避免insert,update,delete lock)

ALTER DATABASE xxx SET ALLOW_SNAPSHOT_ISOLATION ON

進一步說明

啟用快照集隔離,可讀取交易啟動之前存在的資料,也就是前一個版本的資料,這會讓 insert 跟update 不至於 lock 造成 select blocking 問題,所以開啟此設定可以最大化降低 blocking,同時避免死結發生
使用 nolock 會讀取交易過程中的每次異動,但若交易取消,或最後認可的結果不是當時讀到的資料,則讀取的值就會是從未存在任一版本的 dirty data

沒有留言:

自訂權限驗證機制

// 使用 filter [Route("api/[controller]")] [ApiController] [Authorize] [TypeFilter(typeof(CustomAsyncAuthorizationFilter))] public c...