记并发、分布数据库的事务管理

1.并发数据库隔离级别

由于较高的事务可串行化要求会降低系统的并发性并进一步损害系统的吞吐量,由此引申出不同的系统加锁粒度:uncommitted read、 committee read、repeatable read 和 serializable.

uncommitted read:读取未提交的更新数据是可能的

committee read:只能读取已经提交的事务写过的数据

repeatable read:解决unrepeatable read 出现在一个事务对一个行不可重复的异常,这一隔离级别事务对数据保留长期的读锁

serializable:对谓词使用长期的读锁,解决在事务的两次查找中插入数据导致前后数据不一致问题

 2.事务恢复

对每个更新操作系统都给自己做一个记录,称为日志项,该记录保存在日志缓冲区,当事务提交时,日志缓冲区写回到磁盘日志文件,这时事务才结束。

2.1日志恢复

ROLL BACK:从后向前扫描日志记录,提交的事务放到提交列表,未提交的事务UNDO

ROLL FORWARD:从前往后扫描日志记录,对提交列表的事务更新操作REDO

LRU页面置换引发的UNDO异常:当内存不足时,事务更新的数据可能会被写回磁盘,而日志记录的事务更新操作并没有被写回。为了防止这种情况的发生,系统通常创建称为日志序列的一个日志项属性,我们跟踪最近一次日志缓冲区被写回到磁盘后的最小序列号LSN_BUFFMIN,此外记录每个数据缓冲界面最近一次更新操作的日志序列号LSN_PGMAX。原则是数据页面不能被LRU缓冲区写回磁盘,除非该缓冲界面的LSN_PGMAX比全局的LSN_BUFFMIN小。

2.2检查点

不需要从日志文件最初的位置开始执行ROLL RORWARD操作

提交一致性:将日志缓冲写回日志文件,之后系统保证脏数据写回到磁盘,并提交一个CKPT日志项到磁盘,回滚只需要执行到该日志项即可(不能开始新的事务,等待当前事务完成)

高速缓存一致性:将日志缓冲写回日志文件,之后系统保证脏数据写回到磁盘,并提交一个(CKPT,List)日志项到磁盘,List中保存的是检查点中任何处于活动状态的事务列表(不能开始新的事务)

模糊一致性:每次做检查点CKPTn时,前一个检查点遗留的脏数据页面(n-2 to n-1)将写回磁盘上。记录自从上次做检查点CKPTn-1以来缓冲区中的脏数据页面集合。这样做的用途,这些脏数据页面在做下次检查点前,有很好的机会由正常的缓冲区管理操作写回磁盘(对脏数据页面集合标记),可以启动后台进程来写未标记的回脏数据。从n-1开始日志恢复。

3.介质恢复

事务系统要用到的磁盘都将做成批的拷贝。当前磁盘损坏时需要将ROLLBACK执行到系统开始时刻为止,因为我们不能保证做检查点是写回磁盘的数据在备份磁盘上也得到了更新。

稳定的存储介质:存储的数据在两个存储设备上是重复的(包括日志数据)

4.分布式数据库两阶段提交

4.1协调程序给分布式事务中相关的站点事务发准备请求消息,如果有一个站点返回不成功,则协调程序回退本地事务,并发消息给其他站点中止事务执行

4.2如果所有的准备请求结果都是成功,则协调程序提交本地事务,并给其他站点发提交事务消息。这些消息迟早都会到达。

4.3分布式死锁,事务阻塞、数据失效。

5.分布式并发查询

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值