如何确定被某个间谍阻止(直接和间接)的间谍数量

2020-09-21 14:00发布

         点击此处--->   EasySAP.com群内免费提供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

谢谢。

         点击此处--->   EasySAP.com群内免费提供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

谢谢。

付费偷看设置
发送
3条回答
哎,真难
1楼-- · 2020-09-21 14:25

也许是这样吗?

选择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

粗暴的香蕉
2楼-- · 2020-09-21 14:13

感谢Avinash。 :-)

我们将看看其他人是否有解决方案。 我没有希望。 我可以想象使用嵌套的游标方法获得结果,但是不想这样做。 获得我想要的结果是一个"不错",但对我正在处理的脚本并不重要。

小灯塔
3楼-- · 2020-09-21 14:14

MDA表monProcess具有SPID和BlockingSPID,

因此,两个选择的结合可以满足您的需求。

如果从BlockingSPID入围的SPID也可能具有非零/非空的BlockingSPID

表明阻止者在下一级别被进一步阻止。

您也可以在MDA表monLocks中查找,该表具有SPID,BlockedState和BlockedBy列来提供帮助。

我更喜欢monProcess,因为连接数量通常受到限制,

另一方面,锁有时可能会变成数百万个。

HTH

Avinash

PS

要获得稳定的图像,建议您将monProcess放入#temp表中,然后在该表上运行select。

一周热门 更多>