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

时间:2011-03-14 19:01:26

标签: plsql

我有一个程序,每隔一小时运行一次表。从程序处理的记录很多,因此每次执行大约需要12~17分钟。 你现在是否有办法(即触发器)记录每次执行的持续时间(即进入表格)?

3 个答案:

答案 0 :(得分:7)

我不知道可以自动完成此操作的触发器。一种方法是这样做

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;

如果你只需要一些程序,这可能就足够了。

分享并享受。

答案 1 :(得分:1)

我通常使用带有日期或时间戳列的日志表,该列使用默认值sysdate / systimestamp。然后我调用一个自治过程,在我关心的某些地方插入日志(开始/结束过程调用,提交后等):

请参阅here(寻找我的回答)。

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

答案 2 :(得分:1)

要添加第一个答案,一旦有了开始和结束时间戳,就可以使用此功能将它们转换为毫秒数。如果没有别的话,这有助于提高可读性。

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;