数据库原理之九(并发控制技术)

一、事务的特性

事务的ACID特性:
• 原子性(Atomicity):事务中包括的诸操作要么都做,要么都不做
• 一致性(Consistency):事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态
• 隔离性(Isolation):一个事务内部的操作及使用的数据对其他并发事务是隔离的
• 持续性(Durability ):一个事务一旦提交,它对数据库中数据的改变就应该是永久性的

二、封锁的并发控制技术

基本封锁类型
– 排它锁(eXclusive lock,简记为X锁)
– 共享锁(Share lock,简记为S锁)

三级封锁协议:在不同程度上保证数据一致性

a)1级封锁协议:事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放.在1级封锁协议中,如果是读数据,不需
要加锁的,所以它不能保证可重复读和不读“脏”数据。

b)2级封锁协议:1级封锁协议+事务T在读取数据R前必须先加S锁,读完后即可释放S锁.在2级封锁协议中,由于读完数据后即可释放S锁,所以它不能保证可重复读。

c)3级封锁协议:1级封锁协议+ 事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放.3级封锁协议可防止丢失修改、读脏数据和不可重复读。

两段锁协议:保证并发调度的正确性

两段锁协议的内容
– 1. 在对任何数据进行读、写操作之前,事务首先要获得对该数据的封锁
– 2. 在释放一个封锁之后,事务不再获得任何其他封锁。

“两段”锁的含义
– 事务分为两个阶段
• 第一阶段是获得封锁,也称为扩展阶段;
• 第二阶段是释放封锁,也称为收缩阶段。

如:Slock A ... Slock B ... Xlock C ...Unlock B ... Unlock A ... Unlock C;

两段锁协议补充:
• 并行执行的所有事务均遵守两段锁协议,则对这些事务的所有并行调度策略都是可串行化的。
• 所有遵守两段锁协议的事务,其并行执行的结果一定是正确的
• 事务遵守两段锁协议是可串行化调度的充分条件,而不是必要条件
• 可串行化的调度中,不一定所有事务都必须符合两段锁协议。

三、死锁及解决方法

预防死锁的方法:

1)一次封锁法:要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行。将以后要用到的全部数据加锁,势必扩大了封锁的范围,从而降低了系统的并发度。难于事先精确确定封锁对象。

2)顺序封锁法:顺序封锁法是预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。

维护成本高,难于实现。

结论
– 在操作系统中广为采用的预防死锁的策略并不很适合数据库的特点
– DBMS在解决死锁的问题上更普遍采用的是诊断并解除死锁的方法

死锁的诊断与解除:

•允许死锁发生
• 解除死锁
– 由DBMS的并发控制子系统定期检测系统中是否存在死锁
– 一旦检测到死锁,就要设法解除

检测死锁:

a)超时法:如果一个事务的等待时间超过了规定的时限,就认为发生了死锁.

b)等待图法:并发控制子系统周期性地(比如每隔1 min)检测事务等待图,如果发现图中存在回路,则表示系统中出现了死锁。

解除死锁:选择一个处理死锁代价最小的事务,将其撤消,释放此事务持有的所有的锁,使其它事务能继续运行下去。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MVCC(Multi-Version Concurrency Control)是一种数据库并发控制技术,用于解决数据库中多个事务同时读写数据时可能引发的冲突问题。其原理如下: 1. 版本号:每个数据库中的数据行都有一个版本号,用于标识该数据行的更新历史。通常情况下,版本号是一个递增的整数。 2. 读操作:当一个事务执行读操作时,系统会为该事务分配一个时间戳(timestamp)。事务只能读取在该时间戳之前已经提交的数据行版本。如果某个数据行的版本号大于当前事务的时间戳,则该数据行对当前事务是不可见的。 3. 写操作:当一个事务执行写操作时,系统会为该事务分配一个时间戳,并将该时间戳与对应数据行的版本号关联。事务需要先检查所要写入的数据行的版本号是否小于等于当前事务的时间戳,如果小于等于,则可以执行写操作。写操作完成后,该事务的时间戳会被提交。 4. 冲突检测:MVCC通过比较事务时间戳和数据行版本号来检测冲突。如果两个事务的时间戳不相交(即一个事务的时间戳小于另一个事务的最小时间戳或大于另一个事务的最大时间戳),则它们不会产生冲突。 5. 回滚与清理:当一个事务回滚时,系统会将该事务所修改的数据行版本号恢复到事务开始时的状态。当一个事务提交后,系统会对其所修改的数据行进行清理,删除不再需要的旧版本。 MVCC可以提高数据库的并发性能,避免了读-写冲突和写-写冲突,同时保证了事务的隔离性。它被广泛应用于许多关系型数据库系统中,如MySQL、PostgreSQL等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值