事务并发调度之封锁技术

标签: 并发 调度 封锁 | 发表时间:2012-10-06 09:24 | 作者:lb85858585
出处:http://blog.csdn.net

什么是事务


               事务是数据库逻辑工作单位,是用户定义的一组操作序列。具有原子性、一致性、隔离性和持续性。原子性表示操作不可分割,要么都做,要么都不做。一致性表示数据库从一个一致性状态变换到另一个一致性状态隔离性表示事务执行过程中不被其它事务打扰持续性表示事务一旦提交,它对数据库中数据的改变就应该是永久性的。


事务并发的问题


(1)      丢失修改,当事务1在t1时刻读取A=16,事务2在t2时刻读取A=16,在t3时刻事务1修改A=A-1;写回数据库A=15。在t4时刻事务2更新A=A-1,写回数据库A=15。这样导致了事务1的修改丢失。如下图:


(2)      不可重复读,当事务1在t1时刻读取A=50,读取B=100,求和=150,事务2在t2时刻更新B=100,修改B=B*2,写回B=200,在t3时刻事务1读取值校对重读B,发现B变为200与第一次读取不一致,如下图:


(3)      脏读,事务1在t1时刻读取C=100,更新C=C*2写回数据库C=200,事务2在t2时刻读取C=200,在t3时刻事务1执行了更新C的回滚操作,C=100,那么此时就导致事务2读取的C为脏数据。如下图:


产生以上问题的原因:由于事务的并发破坏了事务的隔离性,导致各个事务并发出现干扰,要想是事务能达到隔离特性,就需要串行调度,也就是某一时刻只能有一个事务完成,其它事务等待。


封锁解决并发问题


封锁:是事务T在对某个数据操作时,例如,对表、记录等操作之前,先向系统发出请求,对其加锁,加锁后事务T就对该数据拥有了一定的控制,在事务T没有释放它的锁之前,其它事务不能更新该数据

封锁类型:排它锁(exclusive lock)也成为X锁,共享锁(share lock)也成为S锁。其关系为:对数据加X锁后,其它事务不能加任何锁,对数据加S锁后,其它事务可以加S锁,但不能加X锁。

采用三级封锁协议解决事务并发产生的问题:

(1)      一级封锁协议,解决修改丢失问题。描述如下:当事务T在修改数据R之前必须先对其加X锁,直到事务结束。如图:


事务1在读取A进行修改之前先对A加X锁,当事务2再请求对A加X锁时被拒绝,只能等待事务1释放A上的锁。

(2)      二级封锁协议,解决修改丢失和脏读问题。描述如下:在一级封锁协议基础上,当事务读取数据R之前必须先对其加S锁,读完后释放S锁。如图:


事务1在对C修改之前先加X锁,修改后写回磁盘,事务2请求数据C,首先请求在C上加S锁,因为事务1加了S锁,事务2只能等待事务1释放X锁,当事务1由于某种原因回滚C=100,释放X锁后,事务2获取S锁,读取C=100,避免了脏读。

(3)      三级封锁协议,解决修改丢失,脏读,不可重复读。描述如下:在一级封锁协议基础上,当事务读取数据R时必须先加S锁,当整个事务读取结束后释放S锁。如下图:


事务1在读取A,B之前,先对A,B加S锁,这样当其它事务只能对A,B加S锁,而不能加X锁,因此其它事务只能查询而不能修改A,B。所以当事务2修改B申请为其加X锁时被拒绝,只能等待事务1释放S锁。由于事务1没有结束因此S锁被占用,事务2等待,此时当事务1再次校验B时,读取B=100,避免了不可重复读。

作者:lb85858585 发表于2012-10-6 9:24:58 原文链接
阅读:37 评论:2 查看评论

相关 [并发 调度 封锁] 推荐:

事务并发调度之封锁技术

- - CSDN博客推荐文章
               事务是数据库逻辑工作单位,是用户定义的一组操作序列. 具有原子性、一致性、隔离性和持续性. 原子性表示操作不可分割,要么都做,要么都不做. 一致性表示数据库从一个一致性状态变换到另一个一致性状态隔离性表示事务执行过程中不被其它事务打扰持续性表示事务一旦提交,它对数据库中数据的改变就应该是永久性的.

伊朗封锁所有VPN端口

- tomz - Solidot
伊朗是互联网封锁最广泛和最严密的国家之一,社交网站如Facebook、Youtube、Orkut、MySpace和Twitter皆遭到屏蔽,迫使伊朗网民使用VPN等工具绕过审查. 然而现在,伊朗的互联网封锁深入到了新的地步:从2011年9月30日起,所有VPN端口都被封锁,伊朗正朝着建立“清真局域网”大步前进.

三个英文字母遭封锁

- 拉登 - Solidot
@wmrofficial 写道 "gzdavidwong在Twitter上称:“维基的LGBT条目全线撞墙,是因为 LGBT rights in Europe 这个模板里面的某个国家. ”此前,维基百科url中带有“俄罗斯”的条目皆无法在红色角落访问,现在已经可以访问. 经过多次试验,发现被封锁的竟是对“白俄罗斯LGBT權益”的链接.

伊朗封锁所有VPN端口

- Aim - internet.solidot.org
伊朗是互联网封锁最广泛和最严密的国家之一,社交网站如Facebook、Youtube、Orkut、MySpace和Twitter皆遭到屏蔽,迫使伊朗网民使用VPN等工具绕过审查. 然而现在,伊朗的互联网封锁深入到了新的地步:从2011年9月30日起,所有VPN端口都被封锁,伊朗正朝着建立“清真局域网”大步前进.

网友悬赏:向网L封锁之父方滨兴扔鞋

- 后太史生(Wade) - 2可器的电线杆:世界的另一面
”是的,同学们拿鸡蛋和鞋扔我. 方校长怒斥武大保安:你们怎么回事. 他们今天在推特上谋划扔我鞋子都半天了,你们咋一点准备都不做. 武大保安:你说的那个网站俺们上不了···.     据网易微博消息:北邮电大学校长方滨兴刚才(5月19日下午)在武汉大学被人用鸡蛋和臭鞋砸,其中一只臭鞋砸中方的胸部,鸡蛋没有砸中.

Gmail服务疑遭防火墙不定时封锁

- Alei - Solidot
过去几周,中国的Gmail用户发现访问十分困难,经常出现“找不到服务器”等错误信息. 有人利用2台VPS服务器,一台在上海,一台在香港,运行测试程序,对Google的HTTP服务和HTTPS服务同时进行测试. 结果显示,HTTP服务连接正常,HTTPS服务连接失败的周期为15分钟左右(最初几天是间隔10分钟),15分钟正常访问服务,15分钟TCP协议无法建立连接,周而复始.

出现假凭证 谷歌暂封锁DigiNotar凭证网站

- MZ - cnBeta.COM
有用户在Gmail论坛上透露,登陆Gmail帐号时看到Chrome浏览器跳出凭证警告,表示他所要登陆的网站使用的是无效的凭证 (Certificate Authority, CA),且Chrome浏览器并不支持,接着Mozilla即发出声明表示将更新Firefox等产品 以封锁任何采用DigiNotar所颁发凭证的网站.

新浪屏蔽“擅自封锁微博新浪被判违约”

- 请叫我火矞弟 - Solidot
中国最大的门户在滥用自身权力上是不会有任何犹豫的. 昨天,《京华时报》报导说新浪首次因擅自封锁微博被判违约,赔偿了2520元. 这篇报道已被《京华时报》删除(快照),相关转载也大都被删除,只有竞争对手如腾讯的转载还保留. 这显然是公关所为,但在新浪微博中输入“擅自封锁微博新浪被判违约”,返回的是“根据相关法律法规和政策,搜索结果未予显示”,新浪明显依据的它自己制定的法律.

突破畅销榜的封锁发现好书

- - Tech2IPO
[百道专稿] 一家名为Jellybooks的英国新创公司将自己的目标定为“让那些隐藏在角落但却很优秀的图书冲破畅销书榜的重重包围,被人们重新发现. ”在提升图书可见度的同时,他们还按团购模式运作销售. 安德鲁•隆贝格,Jellybooks的创始人. 安德鲁•隆伯格(Andrew Rhomberg)认为,“在线图书发现”这类服务并不是很好.

MySQL 事件调度器 定时调度

- - 码蜂笔记
MySQL 5.1 引入的时间调度器可以作为定时任务调度器,取代系统的cron调度,调度时间可以精确到秒,实时性好. 首先查看是否开启了事件调度器: show variables like "event_scheduler"; 或 SELECT @@event_scheduler;. 开启事件调度器: SET GLOBAL event_scheduler = ON;,这个命令需要具有 SUPER 权限才能执行,可以用 root 用户来执行,说明是作用在整个数据库服务上的,而不单是某个数据库实例.