程序时间执行计数器

时间:2019-01-03 08:16:45

标签: sql sql-server

我有一个过程可以将数据从一张表插入到另一张表,而一次则需要5分钟,而下一次则需要15分钟。 我要编写代码,以便在该过程花费10分钟以上的时间后在我的日志表中创建日志。我可以使用ms sql中是否存在任何函数或时间计数器?

3 个答案:

答案 0 :(得分:4)

将以下几行添加到您的SP中,它应该可以工作:

ALTER PROCEDURE YourSP
    AS
BEGIN
DECLARE @StartTime AS DATETIME = GETDATE();
... <Your current lines>
IF DATEDIFF(mi, @StartTime, GETDATE()) > 10
    INSERT INTO LogTable <YourFields>, MinutesSpent 
    VALUES <YourValues>, DATEDIFF(mi, @StartTime, GETDATE())
END

答案 1 :(得分:2)

这个评论太长了。

为什么只记录对存储过程的特定调用?您应该记录 all 调用并过滤出所需的调用。本周您可能会对超过10分钟的时间感兴趣。下周,数据可能会增加,可能需要12分钟。  或者,您可以更改代码以使其更高效,并且应在2分钟内完成。

如果您只对计时感兴趣,我会写一个相当通用的日志表,如下所示:

create table spTimeLog (
    procedureName varchar(255),
    startDateTime datetime
    endDateTime datetime,
    createdAt datetime default getdate()
);

create procedure usp_proc . . .
begin
    declare @StartTime datetime = getdate();
    . . .

    insert into spTimeLog (procedureName, startDateTime, endDateTime)
        values ('usp_proc', StartTime, getdate());
end;

然后,您可以在查询表时获取所需的信息:

select count(*)
from spTimeLog tl
where tl.procedureName = 'usp_proc' and
      endDateTime > dateadd(minute, 10, startDateTime);

通常,当我为实际应用程序编写存储过程时,存储过程进入和退出时(无论成功与否)都会生成审核日志。

答案 2 :(得分:1)

您可以尝试这种方式

declare @start datetime = getdate()

-- your SQL statements
exec dbo.MyStoredProcedure

declare @executionTimeInMilliseconds int = datediff(ms, @start, getdate())