gpt4 book ai didi

sql-server - SQL Server 2012 : Running multiple UPDATE FROM SELECT on the same table simultaneously

转载 作者:行者123 更新时间:2023-12-01 06:29:34 25 4
gpt4 key购买 nike

情况:

1)有大表1 (9GB 数据,20GB idx 空间,12M 行)
2)有几个更新 更新/选择 表1 一一运行
3) 每个更新 语句更新不同的列
4)他们都没有使用以前更新的列来计算新的更新列
5)完成它们需要一段时间

问题:

我想运行这些更新 同时 ,但我担心死锁。如何避免它们? 设置事务隔离级别读取未提交会有帮助吗?

更新 好像:

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

最佳答案

如果相同的列未更新且未在其他子句中使用,则 READ UNCOMMITTED 的脏读可能会起作用,但恐怕这是一个脆弱的解决方案。

为了获得更一致的解决方案,您可以根据操作混合使用 ROWLOCK/UPDLOCK/NOLOCK。 F.e.

UPDATE
TABLE1 WITH (ROWLOCK)
SET
col1 = TABLE2.col2
FROM
TABLE1 WITH (ROWLOCK, UPDLOCK)
INNER JOIN TABLE2 WITH (NOLOCK) ON (TABLE1.ID = TABLE2.ID)

如果您的语句主要更新不同的行,则可以省略 ROWLOCK。

在极少数情况下可能会发生锁升级,但可以通过以下方式进行限制
ALTER TABLE TABLE1 SET (LOCK_ESCALATION = DISABLE)

顺便说一句,您的解决方案的目的是什么?我不认为你会赢得很多性能,小的部分更新可以比并行的大更新处理得更快。

关于sql-server - SQL Server 2012 : Running multiple UPDATE FROM SELECT on the same table simultaneously,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24034725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com