2PL,严格对比严格模型,有什么好处吗?

Anj*_*oeu 10 sql database oracle database-design database-schema

在2PL(两阶段锁定)中,严格模型对严格模型有哪些优势?

I)严格模型没有优势.

II)与严格模型相反,它保证不会发生饥饿.

III)与严格模型相比,它保证不会发生死锁.

IV)与严格模型相比,无需预测未来所需的数据.

我的笔记说上面所有都是假的.我有点困惑.有人可以为我澄清为什么所有这些都是假的?

Tha*_*rif 13

什么是两阶段锁定(2PL)协议?

A transaction is two-phase locked if:

before reading x, it sets a read lock on x

before writing x, it sets a write lock on x

it holds each lock until after it executes the corresponding operation

after its first unlock operation, it requests no new locks
Run Code Online (Sandbox Code Playgroud)

现在,什么是严格锁相?

在这里,事务必须保持其所有的独占锁,直到它提交/中止.

但是,什么是严格的2PL?

严格的两相锁定甚至更严格:这里所有锁都保持到提交/中止.在此协议中,事务可以按它们提交的顺序序列化.

更深入:

严格的2PL:

在此输入图像描述

与2PL相同但保留所有独占锁,直到事务已成功提交或中止. - 它保证了无级联的可恢复性

严谨的2PL:

在此输入图像描述

与Strict 2PL相同但保持所有锁定,直到事务已成功提交或中止. - 它用于动态环境,其中数据访问模式事先不知道.

没有死锁.此外,请求由旧事务持有的项目的较年轻的事务被中止并且以相同的时间戳重新启动,避免了饥饿.

我希望以上关于图表的清晰解释必须让你清楚地认识到严谨的概念和优点.

谢谢


Sim*_*stö 6

我——有一个优势

看看加州大学洛杉矶分校的这篇讲义

严格的两阶段锁定具有严格的 2PL 的优点。此外,它还具有这样的属性:对于两个冲突的事务,它们的提交顺序是它们的可串行化顺序。在某些系统中,用户可能期望这种行为。

这些讲义有一个示例(示例中的模型是严格的 - 不严格):

考虑在同一站点执行的两个事务,其中读取 x 的长时间运行事务 T1 排在写入 x 的短事务 T2 之前。T2 首先返回,在 T1 完成之前显示 x 的更新版本(基于旧版本)。

II 和 III - 不影响死锁/饥饿

严格的 2PL 意味着在事务结束后释放所有锁,而不是严格的 2PL,在严格的 2PL 中只读锁可能会提前释放。这不会影响在扩展阶段发生的死锁或饥饿(事务无法获取所需的锁)。在死锁中,两个进程始终处于扩展阶段。

IV - 都需要知道扩展阶段锁定所需的数据 - 收缩阶段各不相同

严格:我不知道严格 2PL 的通常实现细节,但如果在事务结束之前释放读锁,则必须知道(如果您愿意,可以 100% 确定地预测)事务稍后不需要该锁。
严格:所有读锁都会在事务结束时释放,并且事务永远不必评估是否应该释放读锁或保留它以供事务中以后的读取。


严格还是严格更常用/更受欢迎?

使用这两个模型中的哪一个取决于具体情况。现代 DBMS 使用比简单严格或严格的 2PL 更复杂的并发处理。话虽如此,从维基百科关于两阶段锁定的文章来看,严格(SS2PL)模型的使用更为广泛:

SS2PL [严格] 已成为大多数数据库系统选择的并发控制协议,并自 20 世纪 70 年代初期就开始使用。[...]

2PL 的一般形式以及与严格性相结合的形式(即严格 2PL (S2PL))尚未在实践中得到应用。流行的SS2PL不需要像2PL和S2PL那样标记“第一阶段结束”,因此更容易实现。此外,与一般的 2PL 不同,SS2PL 提供了有用的严格性和承诺排序属性,如上所述。[...]

SS2PL 对比 S2PL:两者都提供可串行性和严格性。由于 S2PL 是 SS2PL 的超类,因此原则上它可以提供更多并发性。然而,实际上通常不会注意到并发优势(两者都存在完全相同的锁定,S2PL 几乎没有更早的锁定释放),并且处理 S2PL 中的第一阶段结束机制的开销与事务分开。到底,是没有道理的。此外,虽然 SS2PL 提供承诺订购,但 S2PL 不提供。这解释了 SS2PL 优于 S2PL 的原因。[...]