PLSQL-测量过程的执行持续时间

PLSQL-测量过程的执行持续时间,plsql,Plsql,我有一个每一小时运行一次的过程来填充一个表。程序处理的记录很多,因此每次执行大约需要12~17分钟。 您现在知道是否有一种方法(即触发器)可以记录每次执行的持续时间(即记录到表中)?我不知道有哪种触发器可以自动完成此操作。一种方法是 PROCEDURE MY_PROC IS tsStart TIMESTAMP; tsEnd TIMESTAMP; BEGIN tsStart := SYSTIMESTAMP; -- 'real' code here tsEnd :=

我有一个每一小时运行一次的过程来填充一个表。程序处理的记录很多,因此每次执行大约需要12~17分钟。
您现在知道是否有一种方法(即触发器)可以记录每次执行的持续时间(即记录到表中)?

我不知道有哪种触发器可以自动完成此操作。一种方法是

PROCEDURE MY_PROC IS
  tsStart  TIMESTAMP;
  tsEnd    TIMESTAMP;
BEGIN
  tsStart := SYSTIMESTAMP;

  -- 'real' code here

  tsEnd := SYSTIMESTAMP;

  INSERT INTO PROC_RUNTIMES (PROC_NAME, START_TIME, END_TIME)
    VALUES ('MY_PROC', tsStart, tsEnd);
END MY_PROC;
如果您只需要在几个过程中使用此功能,这可能就足够了


共享和享受。

我通常使用带有日期或时间戳列的日志表,该列使用默认值sysdate/systimestamp。然后,我调用一个自治过程,该过程在我关心的特定位置执行日志插入(启动/结束过程调用,提交后,等等):

请参阅(寻找我的答案)


如果要插入数百万行,则可以控制插入日志表的时间(频率)。再一次,看我的例子

要添加到第一个答案中,一旦有了开始和结束时间戳,就可以使用此函数将它们转换为毫秒数。这有助于提高可读性

function timestamp_diff(
  start_time_in timestamp,
  end_time_in timestamp) return number
as
  l_days number;
  l_hours number;
  l_minutes number;
  l_seconds number;
  l_milliseconds number;
begin
  select extract(day from end_time_in-start_time_in)
  , extract(hour from end_time_in-start_time_in)
  , extract(minute from end_time_in-start_time_in)
  , extract(second from end_time_in-start_time_in)
  into l_days, l_hours, l_minutes, l_seconds
  from dual;

 l_milliseconds := l_seconds*1000 + l_minutes*60*1000
   + l_hours*60*60*1000 + l_days*24*60*60*1000;

  return l_milliseconds;
end;

您可以使用
DBMS\u实用程序。也可以正确获取时间@BobJarvis@Sathya:当然可以使用DBMS_UTILITY.GET_TIME,但GET_TIME的分辨率仅为1/100秒。在这种情况下,该函数可能会运行几分钟,但在您有一个运行速度非常快的过程的情况下,时间戳会更好地记录开始和结束时间。当然,如果一个快速运行的过程正在计时,那么大量的记录将插入到PROC_运行时中,这很可能会迅速填满相关的表空间。总是有点…:-)