数据库系统概念笔记——第十五章:并发控制

Posted 叶卡捷琳堡

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库系统概念笔记——第十五章:并发控制相关的知识,希望对你有一定的参考价值。

第十五章:并发控制

为保证事务的隔离性,必须对并发事务之间的相互作用加以控制,这种控制是通过一系列机制中的一个被称为并发控制的机制实现的

15.1 基于锁的协议

15.1.1 锁

考虑两种锁

  1. 共享锁:如果事务T获得了数据项Q上的共享锁,则T可以读但不可以写Q
  2. 排他锁:事务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 时间戳排序协议

时间戳排序协议的基本思想

  • 开始早的事务不能读开始晚的事务写的数据
  • 开始早的事务不能写开始晚的事务已经读过或写过的数据

在这里插入图片描述
不满足时间戳协议
在这里插入图片描述

以上是关于数据库系统概念笔记——第十五章:并发控制的主要内容,如果未能解决你的问题,请参考以下文章

第十五章 iptables

读书笔记 - js高级程序设计 - 第十五章 使用Canvas绘图

《JAVA编程思想》学习笔记——第十五章 泛型

第十五章 系统虚拟机管理

Flask 学习笔记-第十五章-应用编程接口

VLSI数字信号处理系统——第十五章数字强度缩减