sql-server - 使用 LOB 进行读取已提交快照隔离
问题描述
我在 SQL Server 2017 数据库中有一个表,许多源自多个线程的长时间运行的事务都在使用该表。这会导致每天多次死锁,因此我正在考虑实施读取提交的快照隔离。诀窍是该表有 3 个 VARBINARY(MAX) 列,每个列都包含 10-1000MB 之间的数据(平均值约为 20MB),旁边还有几个 int 和 bit 列。
现在的问题:
Q1: SQL Server 是否会将整行(包括 VARBINARY(MAX) 列)复制到 TEMPDB 中?
Q2:如果是这样,将 VARBINARY(MAX) 列移动到与原始表具有 1:1 关系的单独表中是否会提高性能?
解决方案
Sql Server 必须为您提供一致的数据视图(例如,T2 看到您的行,包括 LOB,就像在 T1 开始变异事务之前一样)。这意味着——是的,它别无选择,只能将 LOB 与其余的行数据一起复制。这让我认为是的,性能可能会受益于具有 LOB 的单独表。
像往常一样,我建议做一个简单的实验来衡量两种配置的性能。请在此处发布您的结果。
推荐阅读
- sql - 如何在 Oracle Database 12.1 中将单行转换为列以转换为 JSON?
- android - 如何为我的自定义视图绘制元素添加涟漪效果?
- database - DynamoDB - 设计一对多关系
- r - 汇总牺牲最小分辨率的数据(根据滞后值的总和创建不同大小的组)
- stored-procedures - 返回 Teradata 存储过程中的活动日志
- java - Optional.map 中的 Integer::toString
- java - 更有效地从控制台读取 int 值
- python - 如何使用双向RNN和pytorch填空?
- .net - ResourceLoader 工作不可靠,在语言之间随机切换
- python - 使用python实现参数L系统