SQL SERVER 并发【2015.12.16】
并发控制模型
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】的更多相关文章
- delphi连接sql server的字符串2011-10-11 16:07
delphi连接sql server的字符串2011-10-11 16:07 一.delphi连接sql server 放一个连接组件 ADOConnection, 其它组件TADODataSet,T ...
- SQL Server代理(10/12):使用代理账号运行作业
SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 在这一系列的上一篇,你查看了msdb库下用 ...
- SQL Server代理(5/12):理解SQL代理错误日志
SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 如我们在这个系列的前几篇文章所见,SQL ...
- 读写分离提高 SQL Server 并发性能
以下内容均非原创,仅作学习.分享!! 在 一些大型的网站或者应用中,单台的SQL Server 服务器可能难以支撑非常大的访问压力.很多人在这时候,第一个想到的就是一个解决性能问题的利器——负载均衡. ...
- 读写分离提高 SQL Server 并发性
转自:http://www.canway.net/Lists/CanwayOriginalArticels/DispForm.aspx?ID=476 在一些大型的网站或者应用中,单台的SQL Serv ...
- Sql Server并发和事务
锁的作用范围通常在事务中,事务是建立在并发模式下. 从SQL Server 2005开始,加入了一种新的并发模式-----乐观并发.不管使用哪种并发模式,如果多个会话同时修改相同的数据,都会产生资源争 ...
- SQL Server代理(11/12):维护计划作业
SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 在这一系列的上一篇,我们看了使用代理帐户模 ...
- SQL Server代理(9/12):理解作业和安全
SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 在这个系列的前一篇文章里,你学习了如何在S ...
- SQL Server代理(8/12):使用SQL Server代理外部程序
SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 在这个系列的上篇文章里,你学习如何使用SQ ...
随机推荐
- tps (事务处理系统)
事务处理系统:Transaction processing systems (TPS) 提高事务处理效率与保证其正确性 在数据(信息)发生处将它们记录下来 通过OLTP产生新的信息 将信息保存到数据库 ...
- 【算法和数据结构】_12_小算法_abs_fabsf_fabsd_大端小端判断
最近学习要用到求绝对值函数,看了一下有很多种的abs函数,因此想自己实现这些代码. 下面是我进行测试的代码: #include <stdio.h> typedef unsigned int ...
- 标签栏使用Demo二
// // PHTagViewFrame.m // 标签的使用二 // // Created by 123 on 16/9/6. // Copyright © 2016年 彭洪. All ri ...
- 剖析信用卡 DCC 交易
摘要: 所谓DCC交易(Dynamic Currency Conversion,直译:动态货币转换 ),或者叫CPC交易(Cardholder Preferred Currency,直译:持卡人选定货 ...
- 设计一个较好的框架的难点之一--API兼容性的设计
设计一个好的框架和设计一个好的软件一样,需要考虑的方面很多,比如扩展性.性能.用户体验.稳健性等等,视不同的场景,每个点都可能导致成败,但他们通常并不是老板们关心的,因为在大部分情况下,他们通常都没有 ...
- JVM的生命周期、体系结构、内存管理和垃圾回收机制
一.JVM的生命周期 JVM实例:一个独立运行的java程序,是进程级别 JVM执行引擎:用户运行程序的线程,是JVM实例的一部分 JVM实例的诞生 当启动一个java程序时.一个JVM实例就诞生了, ...
- scope='request'的bean预加载冲突
Error creating bean with name 'authenticationSuccessServlet': Scope 'request' is not active for the ...
- Nodejs与ES6系列4:ES6中的类
ES6中的类 4.1.class基本语法 在之前的javascript语法中是不存在class这样的概念,如果要通过构造函数生成一个新对象代码 function Shape(width,height) ...
- C#如何自定义DataGridViewColumn来显示TreeView
我们可以自定义DataGridView的DataGridViewColumn来实现自定义的列,下面介绍一下如何通过扩展DataGridViewColumn来实现一个TreeViewColumn 1 T ...
- 如何判断一个js对象是否一个DOM对象
我们在写js代码时有时需要判断某个对象是不是DOM对象,然后再进行后续的操作,这里我给出一种兼容各大浏览器,同时又算是比较稳妥的一种方法. 要判断一个对象是否DOM对象,首先想到的无非就是它是否具有D ...