数据库系统概念笔记——第十五章:并发控制
Posted 叶卡捷琳堡
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库系统概念笔记——第十五章:并发控制相关的知识,希望对你有一定的参考价值。
第十五章:并发控制
为保证事务的隔离性,必须对并发事务之间的相互作用加以控制,这种控制是通过一系列机制中的一个被称为并发控制的机制实现的
15.1 基于锁的协议
15.1.1 锁
考虑两种锁
- 共享锁:如果事务T获得了数据项Q上的共享锁,则T可以读但不可以写Q
- 排他锁:事务T获得了Q上的排他锁,则T即可读又可写
要求每个事务都要根据自己将对数据项Q进行的操作类型申请适当的锁。该事务在请求发送给并发控制管理器。事务只有在并发控制管理器授予所需锁后才能继续其操作
锁的相容矩阵
相容函数:令A与B代表任意类型的锁类型,假设事务Ti请求对数据项Q加A类型锁,而事务Tj当前在数据项Q上拥有B类型锁。尽管Q上存在B类型锁,如果事务Ti可以立即获得数据项Q上的锁,则我们就说A类型锁与B类型锁是相容的。当且仅当A类型与B类型是相容的,该矩阵的一个元素comp(A,B)具有true值。
一个事务通过lock-S(Q)指令来申请数据项Q上的共享锁,通过lock-X(Q)指令来申请排他锁,通过unlock(Q)指令释放数据项Q上的锁
要访问一个数据项,事务Ti必须给该数据加锁。如果该数据项已经被另一事务加上了不相容类型的锁,则在所有其它事务持有的不相容类型锁被释放之前,并发控制管理器不会授予锁。因此Ti只能等待,直到锁被释放
例子
死锁和饿死的概念,了解概念即可
15.1.3 两阶段封锁协议
保证可串行性的一个协议是两阶段封锁协议。该协议要求每个事务分两个阶段提出加锁和解锁申请。
1.增长阶段:事务可以获得锁,但不能释放锁
2.缩减阶段:事务可以释放锁,但不能获得新锁
最初,事务处于增长阶段,事务根据需要获得锁,但不能释放锁。一旦事务释放了锁,它就进入了缩减阶段,并且不能再发出加锁请求
例如T1和T2不满足两阶段封锁协议,T3和T4满足
可以证明两阶段封锁协议保证冲突可串行化。对于任何事务,在调度中该事务获得其最后加锁的为止(增长阶段结束点)称为事务的封锁点。
严格两阶段封锁协议:在封锁是两阶段的基础上,还要求事务持有的所有排他锁必须在事务提交后方可释放
强两阶段封锁协议:事务提交之前不得释放任何锁
15.4 基于时间戳的协定
15.4.1 时间戳
对于每一个事务Ti,把一个唯一的固定时间戳和它联系起来,此时间戳记为:TS(Ti)
该时间戳是事务Ti在开始执行前由数据库系统赋予的
每个数据项Q需要与两个时间戳相关联
- W-timestamp(Q)表示成功执行write(Q)的所有事务的最大时间戳。
- R-timestamp(Q)表示成功执行read(Q)的所有事务的最大时间戳。
每当有新的read或write执行时,这些时间戳就更新
15.4.2 时间戳排序协议
时间戳排序协议的基本思想
- 开始早的事务不能读开始晚的事务写的数据
- 开始早的事务不能写开始晚的事务已经读过或写过的数据
不满足时间戳协议
以上是关于数据库系统概念笔记——第十五章:并发控制的主要内容,如果未能解决你的问题,请参考以下文章