假设我在同一台服务器上有两个数据库,RCSI_Yes
并且RSCI_No
. 首先,启用 RCSI。在第二个例子中,事实并非如此。当我编写同时访问两个数据库的查询时,SQL Server 如何决定应使用哪种事务隔离级别?我从哪个数据库运行查询重要吗?
假设我在同一台服务器上有两个数据库,RCSI_Yes
并且RSCI_No
. 首先,启用 RCSI。在第二个例子中,事实并非如此。当我编写同时访问两个数据库的查询时,SQL Server 如何决定应使用哪种事务隔离级别?我从哪个数据库运行查询重要吗?
使用的隔离级别是“读已提交”——锁定与快照是该隔离级别的不同实现。
关于它使用的风格,如果查询禁用该选项的数据库(因为行版本不可用),除了使用锁定风格之外,没有任何选择。
我确实进行了测试,看看它在
RCSI_Yes
从RCSI_No
. 这使用了 RCSI。你可以自己测试一下。
设置
在设置事务打开时执行简单的
SELECT
读取提交操作,无论从哪个数据库上下文执行命令,都会可靠地返回并可靠地阻止。RCSI_Yes.dbo.T1
1
RCSI_No.dbo.T1
将它们组合成一个查询,如下所示......
测试查询
退货
因此,在上述情况下,它会
RCSI_Yes
无阻塞地读取并读取版本1
,然后被阻塞读取RCSI_No
,直到释放该版本上的锁,然后2
从那里读取。最后RCSI_Yes
再次读取相同的快照行。上述行为不同于
哪个返回
在这种情况下,阻塞
RCSI_No
首先发生(在RCSI_Yes
执行计划的分支之前),所以我的假设是,在该版本已经提交之前,它不会在“RCSI_Yes”上下文中创建事务。这有点令人惊讶,因为它与记录的行为相反