我想在Azure Synapse中制造一个僵局。如果文献资料说它“适用于”Synapse,我希望它能像prem那样工作。我已经等了很长时间(超过4个小时),但是死锁检测并没有杀死我的任何一个会话。
使用连接到Synapse专用池的SSMS (规模为DW100c ),我创建和填充两个表。
create table t1(c int);
create table t2(c int);
insert t1(c) select 99;
insert t2(c) select 99;在两个独立的SSMS会话中,我执行以下语句
Session 1 Session 2
------------------------ ------------------------
begin transaction begin transaction
update t1 set c = 0;
update t2 set c = 0;
update t2 set c = 0;
update t1 set c = 7;在我的膝上型计算机上针对Server 2019实例运行此操作会在几秒钟后生成预期的1205错误消息。但是,对Synapse运行它,并且两个会话都被锁定了几个小时。我可以像预期的那样看到sys.dm_pdw_锁定_等待中的会话。网络搜索不会产生任何特定的Synapse。医生们也没有说出我所能看到的任何特点。
这四个更新是测试期间在此实例上的唯一活动。没有其他并发负载。无论表的分布被定义为散列(C)还是循环ROBIN,我都看到了同样的行为。
Synapse如何检测和处理死锁?
发布于 2021-10-10 13:20:12
基于文档,Server不允许等待锁被较新的锁请求阻塞的语句。Server (synampse毕竟)还没有完全实现这个过程。在Server中,对新共享锁的连续请求有时会阻止先前(但仍在等待)对独占锁的请求。例如,UPDATE语句(需要独占锁)可以被为一系列SELECT语句授予的共享锁阻止。若要解决阻塞的进程(通过检查sys.dm_pdw_waits DVM来标识),请停止提交新请求,直到独占锁得到满足为止。
因此,您似乎不需要做两个更新。
https://dba.stackexchange.com/questions/300929
复制相似问题