SQL SERVER 存储过程日志记录

一、查询历史执行总体情况

SELECT TOP 100 db_name(d.database_id) AS DBName,
s.name AS 存储名称,
s.type_desc AS 存储类型,
d.cached_time AS SP添加到缓存的时间,
d.last_execution_time AS 上次执行SP的时间,
d.last_elapsed_time AS [上次执行SP所用的时间(μs)],
d.total_elapsed_time AS [完成此SP的执行所用的总时间(μs)],
d.total_elapsed_time/d.execution_count AS [平均执行时间(μs)],
d.execution_count AS 自上次编译以来所执行的次数
FROM SYS.procedures S JOIN SYS.dm_exec_procedure_stats D
ON S.object_id = D.object_id
WHERE S.NAME='SP_Name'
ORDER BY D.total_elapsed_time/D.execution_count DESC

μs/1000000=S
上面总统执行情况只能反馈一个整体状态,如果某个时间段执行较慢,被平均后则体现不到波动,所以需求用到下面的方法,记录到每次的执行情况。


二、流程概述

1、创建存储过程执行日志表

CREATE TABLE dbo.StoredProcedureLog
(
    LogId INT IDENTITY(1,1) PRIMARY KEY, --一个自增的唯一标识符,用于标识每个日志记录
    ProcedureName NVARCHAR(100), --存储过程的名称
    StartTime DATETIME, --存储过程执行的开始时间
    EndTime DATETIME, --存储过程执行的结束时间
    
    Status INT --存储过程执行的状态,可以自定义状态码来表示成功或失败等
)

2、添加日志记录代码

DECLARE @LogId INT

-- 在存储过程开始执行前插入一条开始执行的日志记录
INSERT INTO dbo.StoredProcedureLog (ProcedureName, StartTime, Status)
VALUES ('YourProcedureName', GETDATE(), 0)

-- 获取刚插入的日志记录的LogId
SELECT @LogId = SCOPE_IDENTITY()

-- 执行存储过程的代码
-- ...

-- 在存储过程执行完成后更新日志记录的状态和结束时间
UPDATE dbo.StoredProcedureLog
SET EndTime = GETDATE(),
    Status = 1
WHERE LogId = @LogId

在上面的代码中,我们首先通过插入一条开始执行的日志记录来记录存储过程的开始时间和状态。然后,我们获取刚插入的日志记录的LogId,以便在执行完成后更新日志记录的状态和结束时间。

3、查询存储过程执行日志

SELECT * FROM dbo.StoredProcedureLog
posted @ 2024-04-02 10:48  苏沐~  阅读(424)  评论(0编辑  收藏  举报