众所周知,有两种锁定策略:Optimistic vs. Pessimistic locking使用乐观锁定时可能会出现死锁吗?
悲观锁定是,当你锁定该记录为您独家使用 ,直到你完成它。它比 乐观锁定具有更好的完整性,但要求您注意应用程序设计以避免Deadlocks。
而且knonw,即Optimistic Concurrency Control是不一样的Multi Version Concurrency Control(Oracle或MSSQL快照/ MVCC-RC):Optimistic vs Multi Version Concurrency Control - Differences?
但是,如果在这两个使用OCC(Optimistic Concurrency Control)两笔交易之间可以发生死锁?
我们可以说乐观锁定通过降低一致性来减少死锁的可能性吗?只有每次更新都在单独的事务中,那么死锁的可能性为0%,但这是最小的一致性。
谢谢!因此Oracle数据库永远不会升级锁。锁定升级大大增加了死锁的可能性。这是否意味着死锁是多版本并发的另一个差异乐观并发?但目前,在完成乐观并发时 - 读取 - 检查 - 修改行时,我们是否使用锁定?或者每次交易只能有一个锁定,所以不能成为死锁。 – Alex
@亚历山大 - 我不确定我是否了解跟进。为了更新一行,你必须锁定它。乐观和悲观锁定之间的区别在于,您是否悲观地锁定行以防万一您可能会更新它,或者乐观地等待,直到您知道要更新它以获取锁定。您可以编写一个应用程序,将每次更新作为单独的事务处理。这样可以减少死锁,但对于数据一致性来说会很糟糕。 –
是的,谢谢,这就是我想知道的。我们可以说乐观锁定通过降低一致性来减少死锁的可能性吗?只有在单独事务中的每次更新时,死锁的可能性都是0%,但这是最小的一致性。使用一定数量的乐观方法,我们可以在死锁和一致性之间取得必要的平衡。 – Alex