点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
考虑运行以下sql
用户1
开始交易 更新TABLE-A集...
用户2
开始交易 更新TABLE-B设置... 更新TABLE-A集...
用户3
开始交易 更新TABLE-C设置... 更新TABLE-A集...
用户4
开始交易 更新TABLE-D集... 更新TABLE-C设置...
因此,用户1直接阻止用户2和用户3,并间接阻止用户4(通过用户3)。 是否有一个查询将返回用户1的spid阻止的spid数量为3的计数? 我怀疑这是一种自我联结,这对我来说始终是个挑战。 理想情况下,我希望该查询能够在任何深度的间接阻止条件下工作。
我们正在使用ASE 15.7
谢谢。
也许是这样吗?
选择spid,作为阻止程序从master..sysprocesses转到#blocks中,而@@ rowcount> 0
开始
update #blocks设置阻止程序= b.blocker < br> from #blocks a,#blocks b
其中a.spid不在(从#blocks中选择阻止程序)
并且a.blocker = b.spid
和b.blocker!= 0
结束
go
选择阻止程序,从#blocks中按阻止计数(*)为"计数"
按阻止程序分组
使阻止程序> 0
按阻止程序
go p>
感谢Avinash。 :-)
我们将看看其他人是否有解决方案。 我没有希望。 我可以想象使用嵌套的游标方法获得结果,但是不想这样做。 获得我想要的结果是一个"不错",但对我正在处理的脚本并不重要。
MDA表monProcess具有SPID和BlockingSPID,
因此,两个选择的结合可以满足您的需求。
如果从BlockingSPID入围的SPID也可能具有非零/非空的BlockingSPID
表明阻止者在下一级别被进一步阻止。
您也可以在MDA表monLocks中查找,该表具有SPID,BlockedState和BlockedBy列来提供帮助。
我更喜欢monProcess,因为连接数量通常受到限制,
另一方面,锁有时可能会变成数百万个。
HTH
Avinash
PS
要获得稳定的图像,建议您将monProcess放入#temp表中,然后在该表上运行select。
一周热门 更多>