簡體   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