Sql Server隔离级别(2)
Sql Server2005之后,引入了一个新的隔离级别Snapshot(Read Committed Snapshot Isolation (RCSI))和(Snapshot Isolation (SI))
在之前的Sql Server隔离级别(1)中提到的四种隔离级别,除了Read Uncommitted之外,其他的三个隔离级别都会阻塞其他事务的执行(写锁会阻塞读锁,读锁也会阻塞写锁)。
这样带来的问题是启用这三个隔离级别将会造成性能的损失和并发量的下降,为了提供更好的并发量并且保持一定的数据一致性,Snapshot应运而生。
如果启用了Snapshot隔离,数据库会为提交的数据建立一个版本信息放在tempdb里。当一个事务开始的时候,会先从tempdb中读取最近一次提交的数据版本,这样就避免了读取的操作被写锁阻塞。
所以使用这个隔离级别,会带来更大的硬盘开销。当一个事务运行在Snapshot这个隔离级别下,为了维护版本信息,其他事务对数据的大量更新会导致tempdb中存储的版本信息非常多,不过SQL Server会将当前操作不再需要的版本信息从tempdb中删除。
而开头提到的Read Committed Snapshot Isolation (RCSI)和Snapshot Isolation (SI)都是使用相同的机制来实现数据的版本控制。不过通常会推荐使用Read Committed Snapshot Isolation (RCSI),相比Snapshot Isolation (SI)有如下好处。
1:Read Committed Snapshot Isolation (RCSI)只需要在数据库中开启相应配置即可,不需要改动现有的数据库代码,就可以从默认的Read Committed变成Read Committed Snapshot Isolation,读取操作将不会再被写操作阻塞。而Snapshot Isolation (SI)则需要在一个事务开始之前显示的声明。
2:Read Committed Snapshot Isolation (RCSI)的开销比Snapshot Isolation (SI)小,因为当一条语句结束之后,SQL Server将不会再为该语句维护行版本信息。而Snapshot Isolation (SI)是对一个事务的声明,对于运行比较久的事务,SQL Server需要在这个期间一直维护版本信息,对应产生的版本数据也就会非常多。
使用这两个隔离级别的方法如下:
Snapshot Isolation (RCSI):
在数据库中打开对应的配置即可
ALTER DATABASE DBNAME
SET READ_COMMITTED_SNAPSHOT ON
Snapshot Isolation (SI):
在数据库中打卡对应的配置,并且需要将一个事务的隔离级别显示声明为Snapshot
ALTER DATABASE DBNAME
SET ALLOW_SNAPSHOT_ISOLATION ON
SET TRANSACTION ISOLATION LEVEL SNAPSHOT
BEGIN TRAN
--Statement
END TRAN
本文基本上是对以下文章的理解和翻译,有兴趣的同学可以继续看看原文
http://msdn.microsoft.com/en-us/library/ms188277.aspx
Sql Server隔离级别(2)的更多相关文章
- Sql Server隔离级别(1)
数据库是一个并发操作的环境,就像多线程一样,这样在高并发的情况下回出现一些问题. 假设我们有一张表Account,表结构和数据如下所示 AccountName Balance jo 100 fo 20 ...
- SQL Server 隔离级别(RC&RR)
- 30分钟全面解析-SQL事务+隔离级别+阻塞+死锁
以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化. 本系列主要是针对T-SQL的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础] ...
- SQL 事务隔离级别
转载来源:https://www.cnblogs.com/chenmh/p/3998614.html 标签: SQL SEERVER/MSSQL SERVER/SQL/事务隔离级别选项/设置数据库事务 ...
- 【概念原理】四种SQL事务隔离级别和事务ACID特性
摘要: SQL事务隔离级别和事务的ACID特性 事务是一组读写操作,并且具有只有所有操作都成功才算成功的特性. 事务隔离级别 SQL事务隔离级别由弱到强分别是:READ_UNCOMMITTED.R ...
- (4.12)全面解析-SQL事务+隔离级别+阻塞+死锁
30分钟全面解析-SQL事务+隔离级别+阻塞+死锁 转自:https://blog.csdn.net/slowlifes/article/details/52752735 2016年10月07日 23 ...
- (分享别人的一篇好文章,来自jackson0714)30分钟全面解析-SQL事务+隔离级别+阻塞+死锁()
30分钟全面解析-SQL事务+隔离级别+阻塞+死锁 阅读目录 概述: 一.事务 二.锁 三.阻塞 四.隔离级别 五.死锁 以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQ ...
- 图解 sql 事务隔离级别
sql 事务隔离级别有四种分种为: 一 Read Uncpommitted(未提交读) 二 Read Committed(提交读) 三 Repeated Read(可重复读) 四 Serializab ...
- SQL事物隔离级别
标准SQL定义了4个隔离级别 Read uncommitted 未提交读 Read committed 已提交读 Repeatable read 可重复读 Serializable 可序列化 基本语法 ...
随机推荐
- osgi笔记
Bundle-Classpath可以实现内嵌jar. 一个Bundle的Activator不需要进行Export 一个Package中的类被两个ClassLoader加载,包中的Private cla ...
- 百度地图API功能集锦
1.点个数太多导致加载缓慢的解决. 2.可视化区域内加载的解决. 3.自定义信息窗口解决. 4.区域/板块/商圈等的绘制功能解决. 基本包含了用到百度地图API会使用到的大部分常规性场景.(聚合点功能 ...
- 最小安装模式下Centos7.*网卡启动配置
最小安装模式下的Centos7.*系统默认情况下,网卡是不启动的.为了解决联网问题,自己搜集了点资料,成功连接了网络.并梳理了下处理过程. 1.首先运行ip addr命令,查看配置文件的名称.有的文章 ...
- 学习indy组件之一idhttp的使用方法
登录 注册 百度首页 新闻 网页 贴吧 知道 音乐 图片 视频 地图 百科 文库 经验 搜索答案我要提问 首页 分类 公社 知道行家 问医生 高质量问答 经验 个人中心手机知道开放平台 关于del ...
- IIS启用兼容模式设置(win2k3—Win7)
点击添加按钮(上图),弹出下面的对话框(下图).在自定义HTTP头名处输入: X-UA-compatible 在自定义HTTP头值处输入: IE=EmulateIE7 (输入时注意不要留下空格)输入完 ...
- Python Quick list dir
昨天 Python释放了 3.5 ,添加了 os.scandir 根据文档该API比os.listdir快Docs which speeds it up by 3-5 times on POSIX s ...
- KMS服务器激活Windows和Office2013EnterprisePlus
KMS服务器激活Windows和Office2013EnterprisePlus 参考了文档 http://wenku.baidu.com/view/0cb2602358fb770bf68a5501. ...
- java ==与equal
java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boolean 他们之间的比较,应用双等号(== ...
- iOS 设置铃声---加载音乐和音频然后进行播放
在有些应用中需要用到背景音乐和音效,那在程序中是这么实现的. 1.首先加载背景音乐需要用到AVFoundation框架 2.音乐资源都是在包里的,所以需要获得包路径,涉及方法- (id)initWit ...
- 【AppCan 开发者】北京开发者交流会之行
不久前AppCan官方组织了开发者交流会活动,我有幸参加了这次活动,官方报销全部费用,还有妹子相伴,哇哇,这是光明正大打FB的节奏啊~ (呃,说实话,这是俺第一次去帝都~心里挺激动的~) 10.25帝 ...