You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查询非系统数据库中用户自定义存储过程的平均执行时间

查询用户自定义数据库存储过程的平均执行时间

sys.dm_exec_procedure_stats这个动态管理视图本身就包含了所有缓存中存储过程的执行统计,包括用户自定义的。要筛选出用户数据库的存储过程,只需关联数据库和对象信息,排除系统相关内容即可。

以下是具体查询语句:

SELECT 
    DB_NAME(ps.database_id) AS DatabaseName,
    OBJECT_NAME(ps.object_id, ps.database_id) AS ProcedureName,
    ps.plan_handle,
    -- 计算平均执行时间(单位:微秒)
    ps.total_worker_time / ps.execution_count AS AVG_EXEC_TIME
FROM sys.dm_exec_procedure_stats ps
INNER JOIN sys.procedures p 
    ON ps.object_id = p.object_id 
    AND ps.database_id = p.database_id
WHERE 
    -- 排除系统数据库,可替换为指定的用户数据库名称
    DB_NAME(ps.database_id) NOT IN ('master', 'model', 'msdb', 'tempdb')
    -- 过滤掉系统内置的存储过程
    AND p.is_ms_shipped = 0
ORDER BY AVG_EXEC_TIME DESC;

关键说明:

  • DB_NAME(ps.database_id):通过数据库ID获取存储过程所属的数据库名称,方便区分不同用户库。
  • OBJECT_NAME(ps.object_id, ps.database_id):跨数据库环境下准确获取存储过程的名称。
  • 关联sys.procedures并设置p.is_ms_shipped = 0:确保只返回用户自行创建的存储过程,排除SQL Server自带的系统存储过程。
  • 如果只需要查询某一个特定用户数据库,可将WHERE中的数据库过滤条件修改为DB_NAME(ps.database_id) = '你的用户数据库名'。

注意:这个视图仅包含当前缓存中的存储过程统计,如果某个存储过程长时间未执行,可能已经被从缓存中移除,此时无法获取其执行数据。

内容的提问来源于stack exchange,提问作者user2882218

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 16:25:39