为什么要用一系列的空头交易来说明呢?如果交易是长的,应该没有区别,不是吗?
但是,
必须注意避免出现以下情况。假设事务T2对数据项具有共享模式锁,而另一个事务T1请求数据项上的独占模式锁。T1必须等待T2释放共享模式锁。同时,事务T3可以请求同一数据项上的共享模式锁.锁请求与授予T2的锁兼容,因此T3可以被授予共享模式锁。此时,T2可能会释放锁,但T1仍然必须等待T3完成。但是,可能会有一个新的事务T4请求同一数据项上的共享模式锁,并在T3释放该锁之前授予该锁。事实上,有可能存在一个事务序列,每个事务都请求数据项上的共享模式锁,并且每个事务在它被授予后一段时间内释放锁,但是T1永远不会获得数据项上的独占模式锁。事务T1可能永远不会取得进展,据说是饿死了。
发布于 2021-02-20 14:28:43
长事务(在时间上)实际上比短事务更容易受到阻塞问题的影响。因此,通常建议将事务设计为尽可能短的时间保持阻塞锁。
因此,在上面的场景中,一系列“长”事务实际上更有可能导致这个问题。然而,作者引用了一系列的“空头”事务来强调,即使交易短(如果有足够多的几乎同时兼容的事务),也可能出现这个问题。
https://stackoverflow.com/questions/66289825
复制相似问题