繁体   English   中英

Progress ABL,如何确定哪个最终用户正在锁定记录并向锁定该记​​录的其他最终用户显示?

[英]Progress ABL, How to determine which end-user is locking a record and display to other end-users who is locking the record?

我意识到Progress ABL有这样做的自然倾向:

默认情况下,“进度”显示消息:正在使用。 等待或选择取消停止。 (2624)

该2624消息提供了信息,但通常不是所希望的,因为用户没有机会没有STOP条件就无法提交更改或继续操作。 然后将它们返回到启动过程。

但是,我希望能够在______锁定之后执行以下操作,以显示哪个正在锁定记录:显示和特定记录已锁定

我确实在这篇文章底部的文章中找到了有关使用VST _Lock的信息,但是Progress文档指出了以下逐字记录:“注意:谨慎地查询_Lock表;频繁的访问会消耗大量的系统资源,并对性能产生负面影响。 ” 是否有替代方法或最佳实践? 任何帮助将不胜感激。

https://knowledgebase.progress.com/articles/Article/P182366

我很想向用户提供有关谁握着锁的好消息的愿望。 但是kbase并不是在开玩笑。 以这种方式使用_LOCK是一个非常糟糕的主意。

11.4+可以减少它的坏处,但是在大型生产系统上仍然是一件非常痛苦的事情。

在具有默认锁定表大小(-L 8192)的小型系统上,它似乎“确定”。 在具有大锁表的大型活动系统上(1 L到-L的值很常见)并且使用了大量锁,您将获得非常非常不同且负面的体验。

更好的解决方案可能是查看“阻止的用户”:

for each dictdb._Connect no-lock
    where _Connect-usr <> ?
      and _Connect-wait <> " -- ":  /* there are spaces around the '--' */

  display _Connect.

end.

这样会更快,并且可能会告诉您所有您需要了解的内容。

如果无论kbase的警告如何,都将扫描_LOCK,则至少在循环中放入一些逻辑以跟踪它花费了多长时间,并且如果它太长了则请保释。 这样的事情可能是一个好的开始:

etime( yes ).

for each dictdb._Lock where _Lock._Lock-usr <> ? and _Lock._Lock-recid <> ?:

  if etime > 500 then leave.

  /* whatever ... */

end.

我假设您已经熟悉find ... Exclusive-lock / share-lock no-wait no-error,因为如果不使用no-wait,就无法使用锁定功能。

查询_lock可能还不错,因为注释听起来很合理。 仅当用户遇到锁定冲突时,才偶尔执行此操作。 此外,性能很大程度上取决于当前锁定的条目总数。

重要的是,根据Progress版本,以正确的方式查询_lock。

重复我对类似问题的回答

  • _LOCK始终具有-L中给出的全部条目数,无论当前存在多少个锁。
  • 在11.4之前的版本中,未对字段进行索引,但是所有使用的锁都位于表的开头,因此您可以使用

     FOR EACH _Lock NO-LOCK: IF _Lock._Lock-Usr = ? THEN LEAVE. 

    (_Lock._Lock-Name =?也可以)。 请参阅http://knowledgebase.progress.com/articles/Article/P161995 (显然,对于很大的锁表或许多锁,实际上并非如此。这可能是您最好的选择,因为扫描整个锁表确实需要一段时间。)

  • 在11.4和11.5中,填充的条目不再位于开头,因此旧代码将给出错误的结果(请参见http://knowledgebase.progress.com/articles/Article/000056304 ,该问题已在11.5.1中修复)。 幸运的是,现在扫描锁定表的速度要快得多,因此您可以使用

     FOR EACH _Lock NO-LOCK WHERE _Lock-Recid <> ?: 

    在同一篇文章中提到。 从技术上讲,这不是通过索引实现的。 (索引不适用于<>运算符。)

  • 从11.5开始,这两种变体都应该起作用,但是带有where-phrase的新变体应该更快。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM