数据库事务

事件是访问并可能更新各种数据项的一个程序执行单元。事件由事务开始与事务结束之间执行的全体操作组成。为了保证数据完整性,数据库系统需要维护事务的以下性质:

原子性(atomicity):事务中的操作要么全部成功,要么全部失败。

一致性(consistency):事务执行前后要保持数据库的一致性。

隔离性(isolation):多个事务并发执行时,不能互相干扰,每个事务感觉不到其他事务的执行。

持久性(durability):一个事务成功完成后,它对数据库的改变是永久的,即使系统出现故障也要保持。

这四个特性被简称为ACID特性

事务状态

事务一共有五种状态:活动状态部分提交状态失败状态中止状态提交状态

初始时,事务处于活动状态;最后一条语句执行后,事务处于部分提交状态;事务成功完成后,处于提交状态;当发现正常操作不能继续时,事务处于失败状态;事务回滚并且数据库恢复到初始状态后,事务处于中止状态。

提交或中止的事务被称为已经结束的事务。数据库系统要保证,无论事务成功执行与否,最后都要进入到提交状态或中止状态。当判定事务不能继续正常执行后,系统可以有两种选择,重启事务杀死事务。当事务失败不是由于事务本身的逻辑引起时,可以重启事务,重启的事务被当作一个新的事务。当事务失败是由于事务本身的逻辑引起时,需要将事务杀死,不再重新执行。

并发执行

事务处理系统通常允许多个事务并发执行。事务并发执行主要基于两点:提高吞吐量和资源利用率以及减少等待时间。其机制与操作系统中多个进行同时在一个系统中运行是一样的。

当多个事务并发执行时,数据库系统必须控制事务之间的相互影响,防止它们破坏数据库的一致性。系统通过并发控制机制来保证。数据库系统通过并发控制器来对各个事务进行调度,并发控制器通过轮转的方式执行不同事务的各个指令,以实现各个事务的并发执行。这一机制与操作系统中的任务调度类似。

数据库系统通过调度控制事务的并发执行时,需要保证数据库的一致性。已知串行执行事务是能够保证数据库的一致的,这就要求一个事务调度要能够转化为等价的串行调度。若调度能够转化为一个串行化调度,则说明调度是可串行化的。冲突可串行化和视图可串行化是串行化的两个概念。

冲突可串行化

事务中,对一数据项的操作无非是读和写,在进行调度时也只需要考虑读和写的冲突的情况。

1、各个指令对于不同的数据项的读写是不冲突的。

2、各个指令对相同的数据项的读操作是不冲突的。

3、对于相同的数据项一部分指令读而另一部分指令写是冲突的。

4、各个指令对相同的数据项进行写操作是冲突的。

也说是说,对相同的数据项进行操作时,至少有一个指令是进行写操作时,则是冲突的。

如果调度1可以经过一系统非冲突指令转换为调度2,则说明调度1和调度2是冲突等价的。

若一个调度S与一个串行调度是冲突等价的,则称调度S是冲突可串行化的。

视图可串行化

视图可串行化也冲突可串行化一样,都是考虑对于数据项的读写操作,但其要求没有冲突可串行化严格。

如果调度1和调度2满足以下三个条件,则说明调度1和调度2是视图等价的。

1、对于每个数据项Q,若某个事务在调度1中读取了Q的初始值,由在调度2中也必须读取Q的初始值。

2、对于每个数据项Q,若某个事务在调度1中读取的值是另一个事务T的一条写指令产生的,则在调度2中读取的值也必须是由事务T的相同写指令产生的。

3、对于每个数据项Q,若某个事务在调度1中执行了最后的写操作,则在调度2中也必须执行最后的写操作。

如果某个调度视图与一个串行调度等价,则说这个调度是视图可串行化的。

可恢复性

可恢复调度

考虑调度有两个事务的情形。如果事务1在对某个数据项Q进行了写操作后,事务2又对该数据项进行读操作,而事务2提交后事务1出现了故障中止,因为事务2已经提交不能中止,这就造成了不一致状态。如果有这一种情况出现,则说明该调度是不可恢复的。对于数据系统来说,要求所有的调度都是可恢复的。可恢复调度要求满足:对事务1和事务2,如果事务2读取了由事务1写入的数据,则事务1必须先于事务2提交。

无级联调度

对于可恢复调度中还可能出现这样一种情况,当事务2读取了事务1产生的数据后事务1出现了故障中止,这里除了要对事务1进行回滚之外,也需要对事务2进行回滚,如果还有其它事务依赖于事务2产生的结果,则也需要回滚,这一现象称为级联回滚。级联回滚导致大量的撤销工作,在有的数据库系统中会对其进行限制。无级联回滚的调试称为无级联调度。无级联高度应满足:如果事务2读取了事务1所写的数据项,则事务1必须在事务2读取之前提交。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值