并发控制模型

  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. Firemonkey 在 iOS 平台能显示更多的 emoji 字符

    使用 Firmonkey 在显示 emoji 字符时,有些 emoji 并无法显示彩色,见下图: 经查 FMX 源码,是因为判断 emoji 的字符区段不足造成的,经过修改后,便可显示,见下图: 修改 ...

  2. 电子商务中:B2C、B2B、C2B、C2C、O2O、P2P

     c2c实际是电子商务的专业用语,是个人与个人之间的电子商务.比如一个消费者有一台电脑,通过网络进行交易,把它出售给另外一个消费者,此种交易类型就称为C2C电子商务.淘宝是属于C2C模式的.   c2 ...

  3. 开始自学H5前端-第一天

    自从iOS工作丢了后 就萌生了自学这个想法 但是一直在纠结学哪一门语言好 我是计算机科学与技术专业的 其实对于我来说 学啥都算是有点基础的 但是被iOS坑惨了之后 就会不自觉的进行各个方向和前景分析 ...

  4. ahjesus code simith 存储过程模板

    <%------------------------------------------------------------------------------------------ * Au ...

  5. Jetty 的工作原理以及与 Tomcat 的比较

    Jetty 的基本架构 Jetty 目前的是一个比较被看好的 Servlet 引擎,它的架构比较简单,也是一个可扩展性和非常灵活的应用服务器,它有一个基本数据模型,这个数据模型就是 Handler,所 ...

  6. Jmeter常用函数之__CSVRead使用

    __CSVRead函数用于对脚本进行参数话,当脚本中不同变量需要不同参数值时,可以考虑__CSVRead函数. 以登录的用户名.密码为例:实际进行压力测试时,需要模拟使用不同的用户并发访问系统,此时需 ...

  7. singleCall单来源调用解析及实现

    定义: 单来源调用指一个类的生成工作只能由特定类来执行. eg李宁牌鞋子只能由李宁专卖店生产 这个问题归结起来,也就是说在工厂模式中,指定的产品类只能通过具体的特定工厂类来生成,而不能自己new出来或 ...

  8. Masonry – 实现 Pinterest 模式的网格砌体布局

    Masonry 是一款 JavaScript 网格布局插件,可以实现类似 Pinterest 模式的砌体布局效果.通过把元素自动填充在垂直的空白区域,就像墙上堆砌的石头一样.这个库还可以作为 jQue ...

  9. 强大的<canvas>

    <canvas> 个人认为<canvas>是h5最重量级的新标签了,现在各种h5小游戏都是基于<canvas>的,它为游戏提供了一个功能强大的画布,可在画布上绘制丰 ...

  10. ubuntu制作本地源

    背景 平时apt-get install安装软件时,下载的deb文件都会存放在/var/cache/apt/archives/下,为了今后重装或给别人用,特别是没有网络时,这些deb文件实际上是可以派 ...