我在SQL Server 2017 DB中有一个表,该表由许多源自多个线程的长时间运行的事务使用。这会导致一天几次死锁,因此我正在考虑实现读取已提交快照隔离。诀窍是该表具有3个VARBINARY(MAX)列,每个列中除了几个int和bit列外,还包含10-1000MB之间的数据(平均约为20 MB)。
现在是问题:
第一季度: SQL Server是否将整个行(包括VARBINARY(MAX)列)复制到TEMPDB中?
第二季度:如果这样,将VARBINARY(MAX)列移动到与原始表具有1:1关系的单独表中,性能是否会得到好处?
答案 0 :(得分:1)
Sql Server必须为您呈现数据的一致视图(例如,T2看到您的行,包括LOB,就像T1开始更改事务之前一样)。这意味着-是的,除了将LOB与其余行数据一起复制外,别无选择。这让我认为是的,通过使用带有LOB的单独表可以提高性能。
和往常一样,我建议您做一个简单的实验,以测量两种配置的性能。请在这里发布您的结果。