📜  DBMS中基于锁的并发控制协议

📅  最后修改于: 2021-09-27 22:50:36             🧑  作者: Mango

首先,我希望您熟悉与交易相关的一些概念。

  • 什么是可恢复计划?
  • 什么是级联回滚和无级联计划?
  • 确定调度是否是冲突可序列化的。

现在,我们都知道事务必须遵循的四个属性。是的,你没看错,我是说 ACID 属性。并发控制技术用于确保保持并发执行事务的隔离(或非干扰)属性。

我想在你面前提出一个微不足道的问题,(我知道你必须知道这一点,但仍然)你为什么认为我们应该有交易的交错执行,如果它可能导致诸如不可恢复的时间表,不一致等问题威胁。
为什么不让它成为串行时间表,我们可以和平地生活,完全没有并发症。

是的,性能对效率影响太大,这是不可接受的。
因此,数据库可以提供一种机制来确保调度是冲突的或视图可序列化和可恢复的(也最好是无级联的)。在执行后测试可序列化性计划显然为时已晚!
所以我们需要确保可串行化的并发控制协议。

并发控制协议:允许并发调度,但确保调度冲突/视图可序列化,并且是可恢复的,甚至可能是无级联的。
这些协议在创建时不会检查优先级图,相反,协议强加了避免不可序列化调度的规则。
不同的并发控制协议在它们允许的并发量和它们施加的开销量之间提供不同的优势。
我们将学习一些对 GATE CS 很重要的协议。此主题中的问题经常被问到,建议学习此概念。 (在本系列文章的最后,我将尝试列出这个概念的所有理论方面,供学生快速复习,他们可能会在一个地方找到材料。)现在,让我们开始吧:

不同类别的协议:

  • 基于锁的协议
    • 基本 2-PL
    • 保守 2-PL
    • 严格的 2-PL
    • 严谨的2-PL
  • 基于图的协议
  • 时间戳排序协议
  • 多粒度协议
  • 多版本协议

对于 GATE,我们将专注于前三个协议。

基于锁的协议 –
锁是与数据项相关联的变量,它描述了数据项相对于可对其应用的可能操作的状态。它们通过并发事务同步对数据库项目的访问。该协议要求所有数据项必须以互斥的方式访问。让我向您介绍两种常用的锁,以及本协议中遵循的一些术语。

  1. 共享锁(S):又称只读锁。顾名思义,它可以在事务之间共享,因为在持有此锁时,事务无权更新数据项上的数据。使用 lock-S 指令请求 S-lock。
  2. Exclusive Lock (X):数据项既可以读也可以写。这是独占的,不能同时保存在同一个数据项上。使用 lock-X 指令请求 X-lock。

锁兼容性矩阵 –
1

  • 如果请求的锁与其他人已经持有的锁兼容,则事务可能会被授予锁
    交易。
  • 任何数量的事务都可以在一个项目上持有共享锁,但如果任何事务在该项目上持有一个独占(X),则其他事务都不能在该项目上持有任何锁。
  • 如果无法授予锁,则请求事务将等待直到其他事务持有的所有不兼容锁都已释放。然后锁定被授予。

    升级/降级锁:在特定条件下允许持有项目A锁的事务将锁状态从一种状态更改为另一种状态。
    升级:如果 T i是唯一持有元素 A 上 S 锁的事务,则 AS(A) 可以升级为 X(A)。
    降级:当我们觉得我们不想再写数据项 A 时,我们可以将 X(A) 降级为 S(A)。因为我们在 A 上持有 X-lock,所以我们不需要检查任何条件。所以,现在我们已经介绍了锁的类型以及如何应用它们。但是等等,如果我们的问题可以避免的话,只要应用锁,那么生活就会如此简单!如果你做过操作系统下的进程同步,你一定熟悉一个一致的问题,饥饿和死锁!我们将很快讨论它们,但只是为了让您知道我们必须应用锁,但它们必须遵循一组协议以避免此类不良问题。不久我们将使用 2-Phase Locking (2-PL),它将使用锁的概念来避免死锁。所以,应用简单的锁,我们可能不会总是产生Serializable的结果,可能会导致Deadlock Inconsistency。

    简单锁定的问题……

    考虑部分时间表:

    T1 T2
    1 lock-X(B)
    2 read(B)
    3 B:=B-50
    4 write(B)
    5 lock-S(A)
    6 read(A)
    7 lock-S(B)
    8 lock-X(A)
    9 …… ……

    死锁——考虑上面的执行阶段。现在, T 1持有对 B 的独占锁,而T 2持有对 A 的共享锁。考虑语句 7, T 2请求对 B 的锁,而在语句 8 中, T 1请求对 A 的锁。正如您可能注意到的那样死锁,因为没有人可以继续执行。

    饥饿 –如果并发控制管理器设计不当,也是可能的。例如:一个事务可能正在等待一个项目的 X 锁,而一系列其他事务请求并被授予对同一项目的 S 锁。如果正确设计并发控制管理器,则可以避免这种情况。

    呼…我希望你现在熟悉为什么我们应该学习并发控制协议。此外,您应该熟悉基于锁的协议的基础知识和简单锁定的问题。
    接下来,我们将讨论 2-PL 及其类别、实现以及使用它们的优点和缺点。关于基于锁的协议的问题在 GATE 中很常见,我们还将进一步讨论基于图的、时间戳和一些关于 Thomas Write Rule 的有趣问题。到此为止,祝学习愉快。