并发控制模型

  1.悲观并发控制:

A.默认冲突存在,当前进程通过获取当前数据的锁阻止其他进程的访问。

B.读与写之间是相互阻塞。

2.乐观并发控制:

A.使用行版本控制保持数据被操作前的状态。

B.读与写之间不会相互阻塞;但是写会发生阻塞,SQL SERVER会把冲突的错误信息发送给上层的应用程序。

并发造成的数据行为

  1.丢失更新

当两个进程都读取数据A并修改了数据值,就会造成某个进程修改的数据值被覆盖。

数据A=10

 时间 进程1   进程2
 1 SELECT A   
 2   SELECT A 
 3 UPDATA A=A+10   
 4   UPDATE A=A+20 

运行完,数据A=30

进程1对数据A的修改被丢失了。

2.脏读

进程1修改数据A值但未提交,进程2读取了修改后的数据A,随后进程1又回滚了对数据A的修改,造成进程2读取了不一致的状态值。

数据A=10

 时间 进程1   进程2
 1 UPDATA A=A+10(未提交)  
 2   SELECT A 
 3 UPDATA A=A-10(回滚)  

A值本身没有变化,但是进程2读取的A值为20。

  3.不可重复读

进程1读取数据A之后,进程2修改了数据A,进程1再次读取A值,与之前读取的A值不一致。

4.幻影

这种行为发生在一个数据集内的部分数据被修改。

事务的隔离级别

  事务的隔离性:如果多个事务对同一数据进行处理,就需要对数据进行锁定以保证数据的一致性。

1.未提交读 (Uncommitted Read)

事务2可以读取事务1已经修改过但未提交的数据A。

优点:事务2读取数据A不占用任何锁。

缺点:无法保证数据的高一致性。

2.已提交读 (Read Committed)

事务2只能读取事务1修改并已提交完成的数据A。

A.已提交读(锁定)-> 悲观并发控制模型

事务1对数据A持排他锁以进行更新,事务2只能等待这些锁释放以后才能使用这个数据。

事务2访问数据,最少要对数据加共享锁,如果其它事务要更新数据比较等待。

B.已提交读(快照)- 乐观并发控制模型

数据A每次被更新,都会生成最新的快照存储起来,事务读取这个快照,避免读取到未提交的更新值。

3.可重复读(Repeatable Read)

在“已提交读”的基础上,增加:事务1两次查询数据A,数据发生改变。这要求共享锁必须保留至事务1结束。

4.快照(Snapshot)

类似于“已提交读(快照)”,如果当前版本被锁定,允许读取已提交数据的早期版本。

与“已提交读(快照)”的区别在于早期版本该有多早这个问题。

问题:快照隔离,可能导致两个事务同时进行,并引起一个任何序列化执行都不可能产生的结果。

5.可串行化(Serializable)

在“可重复读”的基础上增加:同一事务中,重新执行查询,数据集不会发生变化。

可以防止幻影行为。

SQL SERVER 并发【2015.12.16】的更多相关文章

  1. delphi连接sql server的字符串2011-10-11 16:07

    delphi连接sql server的字符串2011-10-11 16:07 一.delphi连接sql server 放一个连接组件 ADOConnection, 其它组件TADODataSet,T ...

  2. SQL Server代理(10/12):使用代理账号运行作业

    SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 在这一系列的上一篇,你查看了msdb库下用 ...

  3. SQL Server代理(5/12):理解SQL代理错误日志

    SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 如我们在这个系列的前几篇文章所见,SQL ...

  4. 读写分离提高 SQL Server 并发性能

    以下内容均非原创,仅作学习.分享!! 在 一些大型的网站或者应用中,单台的SQL Server 服务器可能难以支撑非常大的访问压力.很多人在这时候,第一个想到的就是一个解决性能问题的利器——负载均衡. ...

  5. 读写分离提高 SQL Server 并发性

    转自:http://www.canway.net/Lists/CanwayOriginalArticels/DispForm.aspx?ID=476 在一些大型的网站或者应用中,单台的SQL Serv ...

  6. Sql Server并发和事务

    锁的作用范围通常在事务中,事务是建立在并发模式下. 从SQL Server 2005开始,加入了一种新的并发模式-----乐观并发.不管使用哪种并发模式,如果多个会话同时修改相同的数据,都会产生资源争 ...

  7. SQL Server代理(11/12):维护计划作业

    SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 在这一系列的上一篇,我们看了使用代理帐户模 ...

  8. SQL Server代理(9/12):理解作业和安全

    SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 在这个系列的前一篇文章里,你学习了如何在S ...

  9. SQL Server代理(8/12):使用SQL Server代理外部程序

    SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 在这个系列的上篇文章里,你学习如何使用SQ ...

随机推荐

  1. Java--Exchanger用于进行线程间的数据交换

    package com; import java.util.concurrent.Exchanger; /** * Created by yangyu on 16/11/28. */ /** * Ex ...

  2. asp.net mvc4 使用 System.Web.Optimization 对javascript和style的引入、代码合并和压缩的优化(ScriptBundle,StyleBundle,Bundling and Minification )

    Bundling and Minification两个单词对今天的内容有个比较好的总结. 问题所在 一. 在asp.net包括mvc项目中,引入js和css也许有人认为是个很容易和很简单操作的事情,v ...

  3. jquery.datepair日期时分秒选择器

    jquery.datepair是一个轻量级的jQuery插件,智能选择日期和时间范围,灵感来自于谷歌日历.Datepair将保持开始和结束日期/时间同步,并可以根据用户的操作设置默认值.该插件不提供任 ...

  4. 类似 Google Tips 页面的卡片式提示和翻转特效

    这款 jQuery 插件用于实现类似 Google Tips 页面的卡片式提示和翻转的交互特效.你可以根据自己的需要定制动画效果参数,定义回调函数来控制行为.因为使用了 CSS3,所以只支持 Chro ...

  5. Timeline Portfolio - 时间轴作品集效果

    这里分享一个超炫的时间轴展示作品集效果.设计师和前端开发人员可以借助这个效果来制作新颖的作品集和个人简历.时间轴专门用来呈现出年代的一系列事件.您可以把这种效果嵌入各种媒体,包括微博,视频和地图,并把 ...

  6. 前端优秀作品展示,JavaScript 版水果忍者

    <水果忍者>是一款非常受喜欢的手机游戏,刚看到新闻说<水果忍者>四周年新版要上线了.网页版的切水果游戏由百度 JS 小组开发,采用 vml + svg 绘图,使用了 Rapha ...

  7. 设计人员应该看的15个很酷的 iOS 8 设计

    苹果新一代智能手机 iPhone 6 发布已经有一段时间了,一些创意设计师已经开始在设计中采用 iOS 8 设计理念.当然,其中有些是对于未来的展望和大胆的设计.我在这里收集了15个很酷的 iOS 8 ...

  8. CSS3文本温故

    1.CSS早期属性,分为三大类:字体.颜色和文本: 2.CSS文本类型有11个属性: 注:还有一个颜色属性:color,主要用来设置文本颜色 3.CSS3文本阴影属性:text-shadow语法:te ...

  9. React入门--------组件的生命周期

    Mounting/组件挂载相关: componentWillMount componentDidMount Updating/组件更新相关: componentWillReceiveProps sho ...

  10. jQuery原型方法.pushStack源码分析

    这次分析的方法跟前面不同,虽然pushStack也是原型方法之一,但是我们几乎从不用在页面调用,在参考手册里面也没有这个方法的使用说明,但是这个方法还是非常重要的,在使用很多jQuery的其他方式都会 ...