我們都知道Sqlserver為了提高并發,允許樂觀隔離級別(讀提交快照,快照)以便讀與寫之間不阻塞.這里有一個在Sqlserver2008R2 SP2 的熱補丁(CU11)下RCSI(讀提交快照)隔離級別下的異常.希望大家注意.
這里我通過實例給大家呈現.
Code 測試數據 (Sql2008R2 sp2 cu11)
create database testbugselect @@VERSION --Microsoft SQL Server 2008 R2 (SP2) - 10.50.4302.0 (Intel X86) use testbuggocreate table testbug(id int identity(1,1) PRimary key,str1 char(10))insert into testbug select 'aa'go 10000 ALTER DATABASE testbugSET READ_COMMITTED_SNAPSHOT ONwith rollback immediate-------------修改庫隔離級別為RCSI
開啟session 1,顯式事務update
begin tran tttupdate testbug set str1='cc'
開啟session 2,select 將被阻塞.
select * from testbug ---將被阻塞
出乎意料,不是說好的樂觀隔離級別下讀與寫不阻塞嗎??
原因分析
我們從DMV sys.dm_tran_locks中查看具體阻塞情況如圖1-1
select * from sys.dm_tran_locks
新聞熱點
疑難解答