1. 程式人生 > >Sql Server併發和事務

Sql Server併發和事務

鎖的作用範圍通常在事務中,事務是建立在併發模式下。

從SQL Server 2005開始,加入了一種新的併發模式-----樂觀併發。不管使用哪種併發模式,如果多個會話同時修改相同的資料,都會產生資源爭用,然後引發一系列的問題。

1.存在的讀現象:包括髒讀、不可重複讀和幻讀。

2.丟失更新:一個會話的修改效果被另外一個會話意外覆蓋

3.過量的鎖定:過量的鎖定會導致阻塞,導致資源壓力和終端使用者的響應延時

4.死鎖:最少兩個會話互相阻塞對方,引發死鎖。SQL Server 儘可能自動偵測並干預死鎖,最後給客戶端返回1205錯誤

絕大部分基於鎖的阻塞問題都可以通過優化查詢、調整索引、修改隔離級別及表結構的設計來大大降低

一:悲觀併發和樂觀併發

預設情況下,SQLServer 都會採用悲觀模式來應對併發。大量的併發操作,如果不使用悲觀併發來防止多個會話對資料同時修改,會造成資料不一致。在該模式下,將會通過加鎖的形式保護正在被讀取的事務,以保證這些資料在讀取過程中不被其他會話修改。在會話修改資料的過程中也會加鎖,防止其他會話讀取或者修改對應的資料。也就是在悲觀模式下,讀操作阻塞寫操作,寫操作阻塞讀寫操作。資料庫中所有操作都會加鎖。