事务调度

事务(transaction)ACID特性:
原子性Atomicity
一致性Consistency
隔离性Isolation
持续性Durability
原子性:事务是一个最小的单元,不能分割为更小的物质。
一致性:数据库操作完后,数据不会被破坏。
隔离性:数据库之间 的操作是隔离的,不会被多条操作干扰。
持续性:数据库执行一行代码后,这条数据将永远记录在里面。

冲突可串行是可串行性的充分条件,不是冲突可串行也可能是可串行的

两段锁协议(2PL)

1、可串行性:并行操作对并行事务的操作的调度事随机的,不同的调度可能产生不同的结果。在这些不同的调度中,肯定有些调度的结果是正确的,正确的调度有哪些
若每个事物的基本操作都串连在一起,没有其他事务的操作与之交叉执行,这样的调度称为串行调度,多个事务的串行调度,其执行结果一定是正确的。但串行调度限制了系统并行性的发挥,而很多并行调度有不具有串行调度的结果,所以我们必须研究具有串行调度效果的并行调度方法。
**定义:**当且仅当某组并发事务的交叉调度产生的结果和这些事务的某一串行调度的结果相同,则称这个交叉调度是可串行化。
2、两段锁协议
两段锁协议规定所有的事务应遵守的规则:
*在对任何数据进行读、写操作之前,首先要申请并获得对该数据的封锁。
*在释放一个封锁之后,事务不再申请和获得其他任何封锁。

事务的执行会分为两个阶段:
第一阶段是获得封锁的阶段,称为扩展阶段。
第二阶段是释放封锁的阶段,称为收缩阶段。

T1:
lock(A)lock(C)lock(B)|unlock(C)unlock(A)unlock(B)

T1遵守了两段锁协议
**定理:**若所有事务均遵守两段锁协议,则这些事务的所有交叉调度都是可串行化的。
对于遵守两段协议的事务,其交叉并发操作的执行结果一定是正确的。值得注意的是,上述定理是充分条件,不是必要条件。一个可串行化的并发调度的所有事务并不一定都符合两段锁协议,存在不全是2PL的事务的可串行化的并发调度。
  同时我们必须指出,遵循两段锁协议的事务有可能发生死锁。

此时事务T1 、T2同时处于扩展阶段,两个事务都坚持请求加锁对方已经占有的数据,导致死锁。
  为此,又有了一次封锁法。一次封锁法要求事务必须一次性将所有要使用的数据全部加锁,否则就不能继续执行。因此,一次封锁法遵守两段锁协议,但两段锁并不要求事务必须一次性将所有要使用的数据全部加锁,这一点与一次性封锁不同,这就是遵守两段锁协议仍可能发生死锁的原因所在。

作者:Mat的学习过程
来源:CSDN
原文:https://blog.csdn.net/aigoogle/article/details/25804285
版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值