在存储过程中编写LOGS

时间:2012-06-18 06:51:22

标签: sql sql-server stored-procedures

我正在使用SQL Server。我正在编写一个执行一系列查询的存储过程。我想记录每个查询的执行时间。可能吗?请帮助。

4 个答案:

答案 0 :(得分:2)

使用记录表的示例:

  

创建程序procedure_name
作为
开始

  声明@start_date datetime = getdate(),
  @execution_time_in_seconds   int

你的程序代码   这里* /


  @execution_time_in_seconds =   datediff(SECOND,@ start_date,getdate())
  插入你的   logging_table(execution_time_column)值(@execution_time_in_seconds)
结束

答案 1 :(得分:2)

引擎已在sys.dm_exec_query_stats中保留执行统计信息。在将大量日志记录(例如insert)添加到过程中的日志选项卡之前,请考虑从这些统计信息中提取哪些内容。包含值:

  • 执行计数
  • 执行时间(已过去)
  • 工作时间(并行查询中所有CPU的非阻塞实际CPU时间)
  • 逻辑读/写
  • 物理读物
  • 返回的行数

这种信息对于您将以简单的方式登录的性能调查更加丰富且更有用。大多数指标包含最小值,最大值和总值(并且执行计数也包含平均值)。你可以立即得到一些线索是什么是昂贵的查询(平均经过的时间很长),这些查询经常阻塞(经过的时间远高于工作时间),导致大量写入或大量读取,返回大量结果等等等

答案 2 :(得分:1)

您可以通过CURRENT_TIMESTAMP跟踪时间戳,并在要执行的语句之前和之后记录它们,然后记录它们,然后将它们进行比较以查看,当然还有有意义的消息,指示开始和结束的内容什么时候。或者如果你想看到它,你可以使用它:SET STATISTICS TIME ONSET STATISTICS TIME OFF这个我在查询分析器中使用。

根据您的确切需要,您需要找出存储这些消息的位置。像桌子或其他东西。

答案 3 :(得分:0)

使用PRINT& GETDATE记录执行时间信息

示例:

    DECLARE @Time1 DATETIME
    DECLARE @Time2 DATETIME
    DECLARE @Time3 DATETIME
    DECLARE @STR_TIME1 VARCHAR(255)
    DECLARE @STR_TIME2 VARCHAR(255)
    DECLARE @STR_TIME3 VARCHAR(255)

    --{ execute query 1 }
    SET @Time3 = GETDATE()
    --{ execute query 2 }
    SET @Time2 = GETDATE()
    --{ execute query 3 }
    SET @Time3 = GETDATE()

    SET @STR_TIME1 = CONVERT(varchar(255),@Time1,109)
    SET @STR_TIME2 = CONVERT(varchar(255),@Time2,109)
    SET @STR_TIME3 = CONVERT(varchar(255),@Time3,109)

    PRINT 'T1 is' + @STR_TIME1
    PRINT 'T2 is ' + @STR_TIME2
    PRINT 'T3 is ' + @STR_TIME3