注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

那海蓝蓝的博客

生活点滴,微风拂去

 
 
 

日志

 
 
关于我

那海蓝蓝,从事数据库研发、数据库测试与技术管理等工作10余年,对数据库的内核有一点研究,长于PostgreSQL和MySQL等开源数据库的内核与架构。 ------------------------------------------ 详情参见: http://blog.163.com/li_hx/blog/static/183991413201699103842845/

网易考拉推荐

事务的属性--可恢复性(Recoverability)  

2016-11-04 21:32:33|  分类: 数据库 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

可恢复性(Recoverability

Recoverability means that committed transactions have not read data written by aborted transactions (whose effects do not exist in the resulting database states)

可恢复性是并发的事务后期、表明提交阶段事务间相互影响的属性。即:已经提交的事务没有读过被撤销的事务的写数据。如果这样的事情发生了,则已经提交的事务读过被撤销的事务的写数据,则脏读异常发生,导致数据不一致。所以可恢复性属性保证的是多个事务并发调度后期的提交顺序对数据的一致性没有影响

如表1-10case 1的事务T2读数据X发生在事务T1写数据X之后,两个事务都提交,没有违反“可恢复性”的定义;case 2 的事务T2读数据X发生在事务T1写数据X之后,事务T1T2都撤销,没有违反“可恢复性”的定义;所以case 1case 2这两种调度方式都具有“可恢复性”。而case 3发生了脏读,所以不满足“可恢复性”。

 

1-10 可恢复性示例

可恢复

不可恢复

case 1

case 2

case 3

T1

T2

T1

T2

T1

T2

R(X)

 

R(X)

 

R(X)

 

W(X)

 

W(X)

 

W(X)

 

 

R(X)

 

R(X)

 

R(X)

 

W(X)

 

W(X)

 

W(X)

Commit

 

Abort

 

 

Commit

 

Commit

 

Abort

Abort

 

 

    前面我们说:可恢复性属性保证的是多个事务并发调度后期的提交顺序对数据的一致性没有影响。那么,如果可恢复性不被满足,即脏读发生,如表1-10case 3,数据库系统的事务管理器应该怎么处理呢?答案是“回滚”,回滚事务T2以保证数据的一致性。

    由此又引发一个新的问题,称为“避免级联回滚(Avoids cascading aborts / rollbacks (ACA))”,即事务管理器在做事务调度的时候,就要避免case 3的情况发生,以避免因为事务T1撤销而导致事务T2被迫被回滚掉。如果事务T2被迫被回滚掉,则称为事务T2因事务T1的撤销/回滚而被牵连即发生级联回滚。

    我们再来看表1-10中的case 2,事务T1撤销,但事务T1写数据X在事务T2读数据之前,所以事务T1发生回滚导致事务T2不得不回滚,这样才能保证数据的一致性。这说明尽管某个调度如case 2符合可恢复性,但是还是可能存在级联回滚的可能。而级联回滚会为数据库系统的事务管理器带来额外的操作进而影响效率,事务管理器应当在进行事务调度的时候,就采取措施避免发生级联回滚。所以,“避免级联回滚”成为了比“可恢复性”更为严格的一个事务属性。

  评论这张
 
阅读(1342)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017