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 ...
随机推荐
- [工具] GIF 动画每帧合并到一张 PNG
功能:将 GIF 动画每帧合并到一张 PNG 需求:配合 ImageMagick 图像处理软件. 下载:[工具]Gif2Png_Aone_1.0.0.zip 使用方法: 请到 ImageMagick ...
- CenOS下firefox browser (火狐浏览器)无法播放网页音乐的解决方法
新装载的Firefox或许无法播放网页音频,解决方法如下: 1. 下载并安装 flashplayer插件&&下载网址:https://get.adobe.com/flashplayer ...
- 泛函编程(35)-泛函Stream IO:IO处理过程-IO Process
IO处理可以说是计算机技术的核心.不是吗?使用计算机的目的就是希望它对输入数据进行运算后向我们输出计算结果.所谓Stream IO简单来说就是对一串按序相同类型的输入数据进行处理后输出计算结果.输入数 ...
- php中的常用数组函数(七) 数组合并 array_merge()和array_merge_recursive()
$arr1 = array(1, 2, 3, 4, 'color'=>'red'); $arr2 = array('a', 'b', 'c', 'color'=>'blue'); prin ...
- javascript之八——BOM
8.1 window对象 BOM的核心对象是window--表示浏览器的一个实例.window有双重角色: 是通过javascript访问浏览器窗口的一个接口: 是ECMAScript规定的Globa ...
- get传递中文产生乱码的解决方式汇总
1 最基本的乱码问题. 这个乱码问题是最简单的乱码问题.一般新会出现.就是页面编码不一致导致的乱码. <%@ page language="java" pageEncodin ...
- 更加简洁易用——wangEditor富文本编辑器新版本发布
1. 前言 wangEditor富文本编辑器(www.wangEditor.com)从去年11月份发布,至今已经有将近10各月了.它就像一个襁褓中的小婴儿,在我的努力以及众多使用者的支持下不断摸索.成 ...
- One Page Scroll – 实现苹果风格的单页滚动效果
单页滚动网站已经被广泛使用了有一段时间了,它们对于快速提供信息是很有用的.One Page Scroll 是一个 jQuery 插件,简化了创建此类网站的步骤,只需创建 HTML 结构,进行简单设置, ...
- Linux新手扫盲
一. Linux特点 1.免费/开源: 2.支持多线程/多用户: 3.安全性好: 4.对内存和文件管理优越. Linux最小只需4M ——> 嵌入式开发 二. 文件目录 Linux系统所有软硬件 ...
- Sharepoint学习笔记—习题系列--70-576习题解析 -(Q59-Q62)
Question 59You are designing a collection of Web Parts that will be packaged into a SharePoint 2010 ...