我知道这样一种理论,即带有范围锁的读取&写锁在事务的持续时间内保持在可序列化的隔离级别上。我可以理解有人说“在所有条件相同的情况下,可序列化的隔离可能,但不一定会导致并发性低于任何其他隔离级别”。但是,按照所有博客/文档的说法,更低的并发性和更高的死锁似乎是必然的。我正试图理解为什么在我的特殊情况下,在实际意义上应该如此。以下是我的一些问题
我当然会接受这样的回答:“根据用户输入,你永远不知道你的执行计划何时会变坏。你设置一个比所需的隔离级别更高的隔离级别,从而使糟糕的情况变得更糟。所以,设置最高的隔离级别,这对你来说是最有效的。”
发布于 2016-08-19 05:04:47
简单的回答是,在从read uncommitted一直到serializable的过程中,您最终会取出更多的不同类型的锁。在某种程度上,这是有意义的;否则,数据库引擎如何能够提供以下保证?
在当前事务完成之前,其他事务不能插入键值在当前事务中任何语句读取的键范围内的新行。
在进一步的文档中,它直接指出范围锁被取出。因此,如果您执行类似于select * from dbo.yourTable where ID between 1 and 50的操作,并且当前该表中只有10行(例如ID1-10),则应用程序将无法:
如果你需要它你就需要它。但是,要知道您正在进入什么;被放置的共享范围锁与许多内容不兼容(读“会导致阻塞”)。有关详细信息,请参阅锁相容性矩阵。
https://stackoverflow.com/questions/39029573
复制相似问题