你的位置:首页 > 软件开发 > 数据库 > 对于大于8046 bytes的行,RCSI/SI事务隔离级别无效

对于大于8046 bytes的行,RCSI/SI事务隔离级别无效

发布时间:2015-06-16 12:00:15
自SQL Server 2005起,我们有了READ COMMITTED SNAPSHOT ISOLATION level (RCSI) 和SNAPSHOT ISOLATION level (SI)两个事务隔离级别。当你使用这些事务隔离级别时,读操作(SELECT语句)在读的时候 ...

SQL Server 2005起,我们有了READ COMMITTED SNAPSHOT ISOLATION level (RCSI) 和SNAPSHOT ISOLATION level (SI)两个事务隔离级别。当你使用这些事务隔离级别时,读操作(SELECT语句)在读的时候不需要S锁(共享锁),写操作(UPDATE,DELETE语句)会对记录进行版本控制,这些改变会写入TempDb。它们就会生成一个版本链,记录的最新版本(存在数据库里的数据页里)指向存在TempDb里的页,下图可以帮助我们理解这个情况。

对于大于8046 bytes的行,RCSI/SI事务隔离级别无效

为了使这个机制有效,SQL Server需要在数据库内部的数据页上的每条记录,增加14 bytes长的指针。这就是说,每条记录增加了14 bytes的长度。或许你已经知道,当你使用定长数据类型时,SQL Server内部的记录长度不能超过8060 bytes。这就意味着,当你启用RCSI/SI隔离级别时,会导致记录超过现有的8060 bytes。我们来看一个简单的例子:

 1 USE master 2 GO 3  4 -- Create a new database 5 CREATE DATABASE VersionStoreRestrictions 6 GO 7  8 -- Enable RCSI 9 ALTER DATABASE VersionStoreRestrictions SET READ_COMMITTED_SNAPSHOT ON10 GO11 12 -- Use it13 USE VersionStoreRestrictions14 GO15 16 -- Create a table where each record is 8047 bytes large17 CREATE TABLE TableB18 (19  Column1 CHAR(40),20  Column2 CHAR(8000)21 )22 GO

原标题:对于大于8046 bytes的行,RCSI/SI事务隔离级别无效

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录