我试图通过一个例子来理解同期和非阻塞参数。如果我是对的,请告诉我。
假设我们在时间戳= 10时发生交易T1,T2,T3 T1,T2,T3分别为30,40,50。 如果查询事务发生在35:
同期: 查询读取T1提交的版本,并保持T2和T3等待读取完成。
对于非阻止: 只有在所有3个事务T1,T2,T3都提交到50之后,查询才会被读取。
答案 0 :(得分:6)
如果您考虑在灾难恢复副本群集上查询,这是最容易理解和最重要的。在DR设置中,主服务器上的每个林都将其日志框架复制到副本上的匹配林。数据库中通常存在多个林,并且由于复制位于林级,因此某些林的数据可能比其他林略晚。
现在想象一个(只读)查询进入副本上的数据库。你有两个选择。一,您可以在最后一个时间戳运行查询,其中包含所有数据(非阻塞)。第二,您可以在最后一个时间戳运行查询(在最远的森林中),并等待所有数据到达(对于其他林),这样您就可以获得事后一致的视图(这是同期的。)
请注意,这两个选项在事务上是一致的。它只是关于数据库如何选择您希望查询运行的时间戳。
只读查询始终无锁。