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 ...
随机推荐
- ios跑酷游戏源码完整版
今天在网上看到了一个很流行的ios游戏源码,酷跑游戏源码,个人下载感觉非常不错,运行起来非常不错的,大家可以研究一下吧,由于源码文件较大,没有上传,请大家见谅. 由于文件较大,没有上传了,大家可以到这 ...
- adb 常用命令总结
1. adb / adb -help 使用帮助 2. adb devices 查看连接到电脑的设备 3. adb install example.apk 安装程序 4. adb -s emulator ...
- Java经典实例:实现一个简单堆栈
堆栈(Stack)是一种常见的数据结构,符合后进先出(First In Last Out)原则,通常用于实现对象存放顺序的逆序.栈的基本操作有push(添加到堆栈),pop(从堆栈删除),peek(检 ...
- mysq基础一(字段类型)
本文转自 “旋木的技术博客” 博客,http://mrxiong.blog.51cto.com/287318/1651098 一.数值类型 Mysql支持所有标准SQL中的数值类型,其中包括严格数据类 ...
- Matter.js – 你不能错过的 2D 物理引擎
Matter.js 是一个 JavaScript 2D 刚体物理引擎的网页.Matter.Engine 模块包含用于创建和操作引擎的方法.这个引擎是一个管理更新和渲染世界的模拟控制器. Matter. ...
- HtmlAgilityPack---Html解析框架
如果你想从一段HTML中提取出指定的标记(如:获取所有的div.获取具有指定属性的元素)如果你想编辑一段HTML,修改里面的部分元素如果你想判断一段HTML中指定元素的关系(子节点.父节点.兄弟节点. ...
- 初试在线破解工具Hydra爆破3389服务器
hydra是一款全能的暴力破解工具,功能强大,几乎支持所有的协议,是著名黑客组织thc开发的. 在Kali Linux下已经是默认安装的,于是测试爆破一下自己的一台VM虚拟机服务器.hydra还支持G ...
- JEPF 3.1.2 发布,我们的软件机床(软件快速开发平台)
JEPF新一代软件快速开发平台(Java Elephant Platform)是一款优秀的平台产品,它本着灵活.快捷开发.高性能.高协作性.高稳定性.高可用性.人性化的操作体验为设计宗旨历经2年研发成 ...
- [outlook]打开以后就自动进入安全模式的解决方法。Outlook start in safe mode.
给客户写了一个Outlook的add-in, 用现在时髦的话应该叫outlook的app. 这个add-in的作用就是把outlook中的email,直接上传到SharePoint中.想要代码的联系我 ...
- warning 当xcode里点运行出现treating unicode character as whites
可能是由于粘贴网页上的代码的时候两行之间的回车引起的,两行之间重新输入回车就行......删掉重新写一遍就ok了