如何记录SELECT、SORT等UniVerse动词的速度?

How to record speed of UniVerse verbs such as SELECT and SORT?

我记得在某处看到一篇文章概述了一种在自定义基本程序中包装 UniVerse 动词(如 SELECT)的巧妙方法,以便记录一些指标,例如经过的时间。简单的答案是分享 link,如果您熟悉那篇文章。

否则,我很感激您可能能够分享的任何示例代码,这些代码举例说明了创建此类包装器的正确方法。

我想将一些数据写入文件,并捕获用户、涉及的文件、执行选择所用的时间以及 SELECT 语句中包含的任何短语等信息.我计划将此数据发送到另一个系统进行分析和报告,以便我们可以更好地可视化各种选择的执行情况。

感谢您抽出宝贵时间,我期待与您讨论解决方案!

更新!

看到范的回答后,我必须澄清一下,我最感兴趣的是记录语句的处理时间,并收集一些其他信息纯粹用于记录目的。我的目标是让它变得透明,这样我 就不会 最终破坏一切。

我的逻辑是这样的:

  • Statement is fired, and wrapper program makes note of the current time.
  • The plain vanilla sentence is executed by the wrapper.
  • When the selection is complete, wrapper notes the current time again and records the difference from start time.
  • While we're in here, use various SYSTEM(x) and/or @ values to capture user name and maybe the number of records.
  • Use some logic to parse the statement and record other interesting tidbits.
  • Write the interesting values to one log file, with incrementing ID.
  • User or proc is oblivious and ends up with the select list as usual (somehow... insert magic here)
  • Some other decoupled process feeds each record to a reporting system in regular batches.

这样更有意义吗?

我会警告说,出于 3 个原因,我会害怕在生产系统上尝试任何类似的东西。

  1. SELECT 用在很多地方,如果您同时有很多 Phantoms 和用户 运行 东西,这很快就会成为一个 I/O 问题。 ..
  2. 根据您的系统的文件数量,以一种不会引起锁定或覆盖问题的方式有意义地组织数据将是一个巨大的挑战。
  3. SELECT 有一个 pick 样式用法和一个 SQL 样式用法,它们的行为不同。
  4. 这太老套了,因为所有人都出去了。
  5. 计数是为了懦夫。

也就是说,您几乎可以替换 VOC 中的任何单词。您可以将 SELECT 的 VOC 条目复制到 SELECT.BASE 中,然后用您自己编目的 SELECT 替换它,您可以在其中捕获命令行参数。

SENTENCE       = @COMMAND
FILE.NAME      = FIELD(SENTENCE,' ',2)
CONDITIONS     = FIELD(SENTENCE,' ',3,999)
NEW.STMT       = "SELECT.BASE ":FILE.NAME:" ":CONDITIONS

然后您将在执行 NEW.STMT 之前或之后进行任何类型的处理。

我不知道这会破坏什么,所以请自担风险。

我刚才 运行 进入的示例程序在 Rocket Software 的 GitHub 回购中,multivalue-lab。那里的程序叫做 VERBTIMER

但是,该程序也存在我在自己的实验中发现的错误,其中忽略了任何先前的活动 select 列表。

我在 GitHub 上打开了一个 issue,如果找到解决方案,我会更新这个 post。