我们都知道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
新闻热点
疑难解答