使用 LOB 读取提交的快照隔离
Read Committed Snapshot isolation with LOBs
我在一个 SQL Server 2017 数据库中有一个 table 被许多来自多个线程的长 运行 事务使用。这会导致每天多次死锁,因此我正在考虑实施读取提交快照隔离。诀窍是这个 table 有 3 个 VARBINARY(MAX) 列,除了几个 int 和 bit 列之外,每个列都包含 10-1000MB 之间的数据(平均值约为 20 MB)。
现在问题:
Q1: 服务器会 SQL 服务器将整行(包括 VARBINARY(MAX) 列)复制到 TEMPDB 中吗?
Q2: 如果是这样,将 VARBINARY(MAX) 列移动到与原来 table?
Sql 服务器必须向您提供一致的数据视图(例如,T2 看到您的行,包括 LOB,就像 T1 开始改变事务之前一样)。这意味着——是的,它别无选择,只能复制 LOB 和其余的行数据。这让我认为是的,性能可能会受益于将 table 与 LOB 分开。
像往常一样,我建议您做一些简单的实验来衡量两种配置的性能。请在此处 post 您的结果。
我在一个 SQL Server 2017 数据库中有一个 table 被许多来自多个线程的长 运行 事务使用。这会导致每天多次死锁,因此我正在考虑实施读取提交快照隔离。诀窍是这个 table 有 3 个 VARBINARY(MAX) 列,除了几个 int 和 bit 列之外,每个列都包含 10-1000MB 之间的数据(平均值约为 20 MB)。
现在问题:
Q1: 服务器会 SQL 服务器将整行(包括 VARBINARY(MAX) 列)复制到 TEMPDB 中吗?
Q2: 如果是这样,将 VARBINARY(MAX) 列移动到与原来 table?
Sql 服务器必须向您提供一致的数据视图(例如,T2 看到您的行,包括 LOB,就像 T1 开始改变事务之前一样)。这意味着——是的,它别无选择,只能复制 LOB 和其余的行数据。这让我认为是的,性能可能会受益于将 table 与 LOB 分开。
像往常一样,我建议您做一些简单的实验来衡量两种配置的性能。请在此处 post 您的结果。