在 SQL Server 中,查看存储过程的历史执行时间可以帮助识别性能瓶颈,判断是否需要进行优化。以下是几种常用的方法来查看或监控存储过程的执行时间:
1. 使用 SQL Server Profiler
SQL Server Profiler 是一个图形化工具,可以捕获并分析 SQL Server 的各种事件,包括存储过程的执行时间。
步骤:
- 打开 SQL Server Profiler。
- 创建一个新的跟踪(Trace)。
- 在事件选择中,选择存储过程相关的事件类别,例如:
- RPC:Completed
- SP:Completed
- 添加需要的列,例如:Duration、StartTime、EndTime。
- 运行跟踪,然后执行您的存储过程。
- 查看跟踪结果中的执行时间。
2. 使用 SQL Server Extended Events
Extended Events 是 SQL Server 中推荐使用的事件处理系统,提供了比 SQL Server Profiler 更加轻量和灵活的监控方式。
步骤:
- 打开 SQL Server Management Studio (SSMS)。
- 在对象资源管理器中,展开 “Management” -> “Extended Events”。
- 右键点击 “Sessions” -> “New Session Wizard”。
- 根据向导创建一个新的会话,选择监控存储过程执行的事件。
- 查看会话结果。
3. 查询系统动态管理视图 (DMVs)
SQL Server 提供了一些动态管理视图,可以用来查看存储过程的执行统计信息。
示例查询:
SELECT qs.creation_time,qs.execution_count,qs.total_worker_time / qs.execution_count AS AvgCPUTime,qs.total_elapsed_time / qs.execution_count AS AvgElapsedTime,qs.total_logical_reads / qs.execution_count AS AvgLogicalReads,qs.total_logical_writes / qs.execution_count AS AvgLogicalWrites,qs.total_physical_reads / qs.execution_count AS AvgPhysicalReads,OBJECT_NAME(qt.objectid) AS ProcName
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
WHERE qt.dbid = DB_ID('YourDatabaseName')AND OBJECT_NAME(qt.objectid) = 'YourStoredProcedureName'
ORDER BY qs.total_elapsed_time / qs.execution_count DESC;
4. 使用自定义日志表
如果您希望进行长期的性能监控,可以在存储过程中加入自定义日志记录,记录每次执行的开始时间和结束时间。
示例代码:
-- 创建日志表
CREATE TABLE ProcedureExecutionLog (ExecutionID INT IDENTITY(1,1) PRIMARY KEY,ProcedureName NVARCHAR(128),ExecutionStartTime DATETIME,ExecutionEndTime DATETIME,ExecutionDuration_ms INT
);-- 在存储过程开始处记录开始时间
DECLARE @startTime DATETIME = GETDATE();-- 存储过程的实际逻辑处理-- 在存储过程结束时记录结束时间和持续时间
DECLARE @endTime DATETIME = GETDATE();
INSERT INTO ProcedureExecutionLog (ProcedureName, ExecutionStartTime, ExecutionEndTime, ExecutionDuration_ms)
VALUES ('usr.access_SP', @startTime, @endTime, DATEDIFF(MILLISECOND, @startTime, @endTime));
5. SQL Server Query Store
Query Store 是 SQL Server 中用于捕获查询性能和执行计划的信息的功能。
-
启用 Query Store:
ALTER DATABASE YourDatabaseName SET QUERY_STORE = ON;
-
使用 SSMS 中的 “Query Store” 查看存储过程的执行统计信息。
通过上述方法中的一种或多种,您可以监控存储过程的执行时间,并根据这些数据判断是否需要进行优化。