Progress 4gl 如何知道正在进行的程序(4GL)访问的记录数?
我想知道一个正在运行的程序正在访问多少条记录。 我找到了VST_TableStat,但它没有按程序对记录数进行分组Progress 4gl 如何知道正在进行的程序(4GL)访问的记录数?,progress-4gl,openedge,progress-db,Progress 4gl,Openedge,Progress Db,我想知道一个正在运行的程序正在访问多少条记录。 我找到了VST_TableStat,但它没有按程序对记录数进行分组 FOR EACH _TableStat NO-LOCK WHERE _TableStat._TableStat-Create > 0 OR _TableStat._TableStat-Delete > 0 OR _TableStat._TableStat-Read > 0 OR _TableStat._Tab
FOR EACH _TableStat NO-LOCK
WHERE _TableStat._TableStat-Create > 0
OR _TableStat._TableStat-Delete > 0
OR _TableStat._TableStat-Read > 0
OR _TableStat._TableStat-Update > 0,
FIRST _File NO-LOCK
WHERE _File._File-Number = _TableStat._TableStat-Id:
DISPLAY
/*_File._File-Name*/
_TableStat-Create
_TableStat._TableStat-Delete
_TableStat._TableStat-Read
_TableStat._TableStat-Update
WITH SIDE-LABELS 1 COLUMN 1 DOWN.
END.
这段代码向我显示了表以及访问了多少条记录,但我想知道访问表的程序
有办法知道吗?
或者有一个像_TableStat这样的带有PID之类的东西的表吗
附言:我正在使用Progress10.2B
提前感谢,,
鲁宾尼奥·桑托斯是什么版本的进步 大约引入了10.1C_UserTableStat。它具有按用户划分的表统计信息 _connect VST中还有客户机语句缓存字段。如果为会话启用了适当的位,则会保存堆栈跟踪,以便您可以确定会话正在执行的行以及它是如何到达的 在他们之间,他们可以让你得到你需要的 顺便说一句:ProTop向您展示了很多数据-
如果需要细粒度的逐程序统计数据,您可能还需要查看一些日志条目类型功能,如4gltrace和QryInfo。什么版本的进度 大约引入了10.1C_UserTableStat。它具有按用户划分的表统计信息 _connect VST中还有客户机语句缓存字段。如果为会话启用了适当的位,则会保存堆栈跟踪,以便您可以确定会话正在执行的行以及它是如何到达的 在他们之间,他们可以让你得到你需要的 顺便说一句:ProTop向您展示了很多数据-
如果需要细粒度的逐程序统计数据,您可能还需要查看一些日志条目类型功能,如4gltrace和QryInfo。它与表_UserTableStat一起工作,正如我所期望的:
FOR EACH _UserTableStat NO-LOCK
WHERE _UserTableStat._UserTableStat-Read > 0
OR _UserTableStat._UserTableStat-Create > 0
OR _UserTableStat._UserTableStat-Update > 0
OR _UserTableStat._UserTableStat-Delete > 0,
FIRST _File NO-LOCK
WHERE _File._File-Number = _UserTableStat._UserTableStat-Num,
FIRST _Connect NO-LOCK
WHERE _Connect._Connect-Id = _UserTableStat._UserTableStat-Conn:
DISPLAY
_Connect._Connect-IPAddress
_Connect._Connect-Name
_Connect._Connect-Pid
_File._File-Name
_UserTableStat._UserTableStat-Read
_UserTableStat._UserTableStat-Create
_UserTableStat._UserTableStat-Update
_UserTableStat._UserTableStat-Delete
WITH SIDE-LABELS THREE-D 1 COLUMN 1 DOWN.
END.
谢谢汤姆·巴斯康的帮助 它与表_UserTableStat一起工作,正如我所期望的:
FOR EACH _UserTableStat NO-LOCK
WHERE _UserTableStat._UserTableStat-Read > 0
OR _UserTableStat._UserTableStat-Create > 0
OR _UserTableStat._UserTableStat-Update > 0
OR _UserTableStat._UserTableStat-Delete > 0,
FIRST _File NO-LOCK
WHERE _File._File-Number = _UserTableStat._UserTableStat-Num,
FIRST _Connect NO-LOCK
WHERE _Connect._Connect-Id = _UserTableStat._UserTableStat-Conn:
DISPLAY
_Connect._Connect-IPAddress
_Connect._Connect-Name
_Connect._Connect-Pid
_File._File-Name
_UserTableStat._UserTableStat-Read
_UserTableStat._UserTableStat-Create
_UserTableStat._UserTableStat-Update
_UserTableStat._UserTableStat-Delete
WITH SIDE-LABELS THREE-D 1 COLUMN 1 DOWN.
END.
谢谢汤姆·巴斯康的帮助 上面的代码与_connect和_UserTableStat之间的连接有问题:
WHERE _Connect._Connect-Id = _UserTableStat._UserTableStat-Conn
您必须使用此选项:
WHERE _Connect._Connect-Usr = _UserTableStat._UserTableStat-Conn
hint: _Connect-Usr = _Connect-Id + 1
接下来,下面的代码给出了按_UserTableStat-read降序排列的列表:
DEFAULT-WINDOW:WIDTH-CHARS = 240.
DEFINE VARIABLE dmon AS DATETIME NO-UNDO.
DEFINE VARIABLE dstart AS DATETIME NO-UNDO.
DEFINE VARIABLE iusertablestat AS INTEGER NO-UNDO.
DEFINE VARIABLE lfirstview AS LOGICAL INITIAL TRUE NO-UNDO.
DEFINE TEMP-TABLE ttuts LIKE _UserTableStat
FIELD _Connect-Type AS CHARACTER INITIAL ?
FIELD _Connect-Name AS CHARACTER INITIAL ? FORMAT "X(15)"
FIELD _Connect-Time AS CHARACTER INITIAL ? FORMAT "X(25)"
FIELD _Connect-ClientType AS CHARACTER INITIAL ?
INDEX _UserTableStat-read _UserTableStat-read
INDEX _UserTableStat-update _UserTableStat-update
INDEX _UserTableStat-create _UserTableStat-create
INDEX _UserTableStat-delete _UserTableStat-delete.
dstart = NOW.
dmon = NOW.
DEFAULT-WINDOW:TITLE = SUBSTITUTE("starting scan of _UserTableStat at &1", dstart).
FOR EACH _UserTableStat NO-LOCK:
iusertablestat = iusertablestat + 1.
IF iusertablestat MODULO 10000 = 0
OR INTERVAL(NOW, dmon, "milliseconds") > 1000 THEN
DO:
dmon = NOW.
IF lfirstview THEN
DO:
DISPLAY "scanning in process" WITH FRAME fviewit.
lfirstview = FALSE.
END.
DEFAULT-WINDOW:TITLE = SUBSTITUTE("&1 - Scanning since &2 ms - &3 _UserTableStat records (started at &4)"
, NOW, INTERVAL(NOW, dstart, "milliseconds"), iusertablestat, dstart).
DEFAULT-WINDOW:TITLE = SUBSTITUTE("starting scan of _UserTableStat at &1 scanned &2 records", dstart, iusertablestat).
PROCESS EVENTS.
END.
/* if you are interested in updates or delte, then adapath this next line */
IF _UserTableStat._UserTableStat-read = 0
THEN NEXT.
IF _UserTableStat._UserTableStat-Conn <> ?
THEN FIND _Connect NO-LOCK WHERE _Connect._Connect-Usr = _UserTableStat._UserTableStat-Conn NO-ERROR. /* beware: you may use _UserTableStat-id + 1 too but do not miss the + 1*/
ELSE RELEASE _Connect.
CREATE ttuts.
BUFFER-COPY _UserTableStat TO ttuts.
IF AVAIL _Connect
THEN BUFFER-COPY _Connect TO ttuts.
END.
DEFAULT-WINDOW:TITLE = SUBSTITUTE("&1 - Scan completed in &2 ms through &3 _UserTableStat records (started at &4)"
, NOW, INTERVAL(NOW, dstart, "milliseconds"), iusertablestat, dstart).
FOR EACH ttuts
, FIRST _File NO-LOCK WHERE _File._File-Number = ttuts._UserTableStat-Num
BY ttuts._UserTableStat-read DESCENDING:
DISPLAY
ttuts._UserTableStat-Num
_File._File-Name
ttuts._Connect-Name
ttuts._UserTableStat-Conn /* = _Connect._Connect-Usr */
ttuts._Connect-Type
ttuts._Connect-Time
ttuts._Connect-ClientType
ttuts._UserTableStat-read FORMAT ">>>,>>>,>>>,>>>,>>9"
ttuts._UserTableStat-update FORMAT ">>>,>>>,>>>,>>>,>>9"
ttuts._UserTableStat-create FORMAT ">>>,>>>,>>>,>>>,>>9"
ttuts._UserTableStat-delete FORMAT ">>>,>>>,>>>,>>>,>>9"
WITH WIDTH 240 FRAME fttuts 17 DOWN.
END.
上面的代码与_connect和_UserTableStat之间的连接有问题:
WHERE _Connect._Connect-Id = _UserTableStat._UserTableStat-Conn
您必须使用此选项:
WHERE _Connect._Connect-Usr = _UserTableStat._UserTableStat-Conn
hint: _Connect-Usr = _Connect-Id + 1
接下来,下面的代码给出了按_UserTableStat-read降序排列的列表:
DEFAULT-WINDOW:WIDTH-CHARS = 240.
DEFINE VARIABLE dmon AS DATETIME NO-UNDO.
DEFINE VARIABLE dstart AS DATETIME NO-UNDO.
DEFINE VARIABLE iusertablestat AS INTEGER NO-UNDO.
DEFINE VARIABLE lfirstview AS LOGICAL INITIAL TRUE NO-UNDO.
DEFINE TEMP-TABLE ttuts LIKE _UserTableStat
FIELD _Connect-Type AS CHARACTER INITIAL ?
FIELD _Connect-Name AS CHARACTER INITIAL ? FORMAT "X(15)"
FIELD _Connect-Time AS CHARACTER INITIAL ? FORMAT "X(25)"
FIELD _Connect-ClientType AS CHARACTER INITIAL ?
INDEX _UserTableStat-read _UserTableStat-read
INDEX _UserTableStat-update _UserTableStat-update
INDEX _UserTableStat-create _UserTableStat-create
INDEX _UserTableStat-delete _UserTableStat-delete.
dstart = NOW.
dmon = NOW.
DEFAULT-WINDOW:TITLE = SUBSTITUTE("starting scan of _UserTableStat at &1", dstart).
FOR EACH _UserTableStat NO-LOCK:
iusertablestat = iusertablestat + 1.
IF iusertablestat MODULO 10000 = 0
OR INTERVAL(NOW, dmon, "milliseconds") > 1000 THEN
DO:
dmon = NOW.
IF lfirstview THEN
DO:
DISPLAY "scanning in process" WITH FRAME fviewit.
lfirstview = FALSE.
END.
DEFAULT-WINDOW:TITLE = SUBSTITUTE("&1 - Scanning since &2 ms - &3 _UserTableStat records (started at &4)"
, NOW, INTERVAL(NOW, dstart, "milliseconds"), iusertablestat, dstart).
DEFAULT-WINDOW:TITLE = SUBSTITUTE("starting scan of _UserTableStat at &1 scanned &2 records", dstart, iusertablestat).
PROCESS EVENTS.
END.
/* if you are interested in updates or delte, then adapath this next line */
IF _UserTableStat._UserTableStat-read = 0
THEN NEXT.
IF _UserTableStat._UserTableStat-Conn <> ?
THEN FIND _Connect NO-LOCK WHERE _Connect._Connect-Usr = _UserTableStat._UserTableStat-Conn NO-ERROR. /* beware: you may use _UserTableStat-id + 1 too but do not miss the + 1*/
ELSE RELEASE _Connect.
CREATE ttuts.
BUFFER-COPY _UserTableStat TO ttuts.
IF AVAIL _Connect
THEN BUFFER-COPY _Connect TO ttuts.
END.
DEFAULT-WINDOW:TITLE = SUBSTITUTE("&1 - Scan completed in &2 ms through &3 _UserTableStat records (started at &4)"
, NOW, INTERVAL(NOW, dstart, "milliseconds"), iusertablestat, dstart).
FOR EACH ttuts
, FIRST _File NO-LOCK WHERE _File._File-Number = ttuts._UserTableStat-Num
BY ttuts._UserTableStat-read DESCENDING:
DISPLAY
ttuts._UserTableStat-Num
_File._File-Name
ttuts._Connect-Name
ttuts._UserTableStat-Conn /* = _Connect._Connect-Usr */
ttuts._Connect-Type
ttuts._Connect-Time
ttuts._Connect-ClientType
ttuts._UserTableStat-read FORMAT ">>>,>>>,>>>,>>>,>>9"
ttuts._UserTableStat-update FORMAT ">>>,>>>,>>>,>>>,>>9"
ttuts._UserTableStat-create FORMAT ">>>,>>>,>>>,>>>,>>9"
ttuts._UserTableStat-delete FORMAT ">>>,>>>,>>>,>>>,>>9"
WITH WIDTH 240 FRAME fttuts 17 DOWN.
END.
不管谁否决了这一点,他都是个白痴——在进行性能调整时,这类问题至关重要。Tom Bascom有一个可以很好地解决这个问题的工具,我相信他很快就会发表评论。谁否决了这一点,谁就是白痴——在进行性能调整时,这种问题是至关重要的。Tom Bascom有一个工具可以很好地解决这个问题,我相信他很快就会发表评论。