个性化阅读
专注于IT技术分析

DBMS基于锁的协议

在这种类型的协议中, 任何事务都必须先获得适当的锁, 然后才能读取或写入数据。有两种类型的锁:

1.共享锁:

  • 也称为只读锁。在共享锁中, 数据项只能由事务读取。
  • 它可以在事务之间共享, 因为当事务持有锁时, 它就无法更新数据项上的数据。

2.排他锁:

  • 在排他锁中, 数据项可以通过事务读取和写入。
  • 此锁是排他的, 在此锁中, 多个事务不会同时修改同一数据。

有四种类型的锁定协议可用

1.简化锁协议

这是在事务处理期间锁定数据的最简单方法。基于简单锁的协议允许所有事务在插入, 删除或更新数据之前获得对数据的锁定。完成交易后, 它将解锁数据项。

2.声明锁协议

  • 声明前的锁定协议评估事务以列出需要锁定的所有数据项。
  • 在开始执行事务之前, 它向DBMS请求所有这些数据项上的所有锁定。
  • 如果授予了所有锁, 则此协议允许事务开始。事务完成后, 它将释放所有锁。
  • 如果未授予所有锁, 则此协议允许事务回滚并等待直到授予所有锁。
DBMS基于锁的协议

3.两相锁定(2PL)

  • 两阶段锁定协议将事务的执行阶段分为三个部分。
  • 在第一部分中, 当事务开始执行时, 它会寻求所需锁的许可。
  • 在第二部分中, 事务获取所有锁。事务释放第一个锁后, 便开始第三阶段。
  • 在第三阶段, 事务不能要求任何新的锁。它仅释放获得的锁。
DBMS基于锁的协议

2PL有两个阶段:

增长阶段:在增长阶段, 事务可能会获得对数据项的新锁定, 但不能释放任何锁定。

收缩阶段:在收缩阶段, 可以释放事务持有的现有锁, 但是无法获取新的锁。

在下面的示例中, 如果允许锁转换, 则可以发生以下阶段:

  1. 在生长期, 可以将锁升级(从S(a)升级到X(a))。
  2. 锁的降级(从X(a)到S(a))必须在缩小阶段完成。

例:

DBMS基于锁的协议

以下方法显示了2-PL如何进行解锁和锁定。

交易T1:

  • 生长阶段:从步骤1-3开始
  • 收缩阶段:从步骤5-7
  • 锁定点:3

交易T2:

  • 生长阶段:从步骤2-6
  • 收缩阶段:从步骤8-9开始
  • 锁定点:6

4.严格的两相锁定(Strict-2PL)

  • Strict-2PL的第一阶段类似于2PL。在第一阶段, 在获取所有锁之后, 事务将继续正常执行。
  • 2PL和strict 2PL之间的唯一区别是Strict-2PL在使用后不会释放锁。
  • Strict-2PL等到整个事务提交后, 然后一次释放所有锁。
  • Strict-2PL协议没有锁释放的收缩阶段。
DBMS基于锁的协议

它没有2PL那样的级联中止。

赞(0)
未经允许不得转载:srcmini » DBMS基于锁的协议

评论 抢沙发

评论前必须登录!