并发控制模型

  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. GJM:用C#实现网络爬虫(二) [转载]

    上一篇<用C#实现网络爬虫(一)>我们实现了网络通信的部分,接下来继续讨论爬虫的实现 3. 保存页面文件 这一部分可简单可复杂,如果只要简单地把HTML代码全部保存下来的话,直接存文件就行 ...

  2. JSON.NET 使用技巧

    1. 序列化相关技巧 通过特性忽略某些属性 有时候我们会有这样的需求,我们只需要序列化实体类中的一部分属性,这时候我们可以通过声明忽略掉一些我们不需要序列化的属性,有两种方式可以使用么达到这个目标: ...

  3. jQuery Layer 弹层组件

    layer是一款近年来口碑非常不错的web弹层组件,她具备全方位的解决方案,致力于服务各个水平段的开发人员,您的页面会轻松地拥有丰富友好的操作体验. 在与同类组件的比较中,layer总是能轻易获胜.她 ...

  4. Boba.js – 用于 Google 统计分析 JavaScript 库

    Boba.js 是一个小的,易于扩展的 JavaScript 库,让谷歌分析(Google Analytics)的更灵活,更容易.它同时支持旧的 ga.js 库以及新的 analytics.js 库. ...

  5. Mithril – 构建杰出 Web 应用的 JS MVC 框架

    Mithril 是一个客户端的 Javascript MVC 框架.它是一个工具,使应用程序代码分为数据层,UI 层和粘合层.提供了一个模板引擎与一个虚拟的 DOM diff 实现,用于高性能渲染,支 ...

  6. OC中的深拷贝与浅拷贝

    深拷贝(deep copy)与浅拷贝(shallow copy)的定义一直是有争论的. 一种理解是: 所谓的浅拷贝, 就是不完全的拷贝 NSString *s = @"123"; ...

  7. assign,copy,strong,weak,nonatomic的理解

    举个例子: NSString *houseOfMM = [[NSString alloc] initWithString:'MM的三室两厅']; 上面一段代码会执行以下两个动作:  1 在堆上分配一段 ...

  8. UIApplication是什么

    1.UIApplication对象是应用程序的象征   2.每一个应用都有自己的UIApplication对象,而且是单例的(只有一个)   3.通过[UIApplication sharedAppl ...

  9. android自定义activity

    今天公司有个需要需要自动弹出界面,而dialog又不符合要求,所以自定义的一个activity的样式 首先在androidmainfest.xml上注册你的activity <activity ...

  10. 【Gson】2.2.4 StackOverflowError 异常

    正文 错误: 08-09 09:56:51.904: E/AndroidRuntime(16384): java.lang.StackOverflowError 08-09 09:56:51.904: ...