据我所知,读提交的快照(RCS)操作在语句级别,允许快照隔离(ASI)在事务级别进行操作,这两个版本都存储在tempdb中的行版本。我还理解,必须在DB中以及在每个连接的设置中启用ASI。
我的问题是,在RCS和ASI下放置在tempdb上的负载级别。例如,对于相同的工作负载,tempdb上的负载是相似的,还是tempdb上的负载通常更高(因为它必须存储更多的行版本)?
发布于 2018-10-09 15:34:38
只要打开数据库设置,就会影响版本化行需要在tempdb中停留多长时间(因为可能在真正快照中运行的事务将具有可重复读取)。也就是说,启用ASI将比启用(仅) RCSI更长时间保持行版本。
至于应用程序的性能,我们不能说。只有启用ASI才能改变客户端应用程序的行为,除非它们也明确要求以快照隔离方式运行。也就是说,不会改变应用程序的默认行为。
假设您的所有应用程序都被修改为使用快照隔离(非常不可能),那么两者的性能将非常相似。读者不会被作家所阻拦。您可以使用更新冲突进入边缘案例,以及如何通过错误处理、重试等方法来处理它们。但是这里有太多的依赖项,因此不能泛化--而且这些都是边缘--的情况,因此它们很难产生可测量的影响。
https://dba.stackexchange.com/questions/219617
复制相似问题