【发布时间】:2014-07-24 22:38:25
【问题描述】:
情况:
1) 有很大的TABLE1(9GB 数据,20GB idx 空间,12M 行)
2) TABLE1 上有几个 UPDATE 和 UPDATE/SELECT 一个一个运行
3) 每个 UPDATE 语句更新不同的列
4) 他们都没有使用以前更新的列来计算新的更新列
5) 完成它们需要一段时间
问题:
我想同时运行这些更新,但我担心死锁。如何避免它们? SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED会有帮助吗?
更新看起来像:
update TABLE1 set col1 = subs.col2
from (select ID, col2 from TABLE2) subs
where TABLE1.ID = subs.ID
update TABLE1 set col10 = col2+col3+col4
update TABLE1 set col100 = col2 + subs.col4
from (
select
b.ID, a.col4
from
TABLE3 a
join TABLE1 b on TABLE1.ID2 = TABLE3.ID2
) subs
where TABLE1.ID = subs.ID
update TABLE1 set col1000 = col2+col3+col4
from TABLE1
join TABLE4 on TABLE4.date = TABLE1.date
join TABLE5 on TABLE5.ID3 = TABLE1.ID
【问题讨论】:
-
这些更新会在一个会话中按顺序运行,还是多个会话会同时执行这些更新?我为什么要问这个问题;因为你提到了 ETL 过程。通常 ETL 进程在单个线程中运行。
标签: sql-server locking sql-update