You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何查询数据库中所有活跃的存储过程?确认未遗漏已删除项

好问题!你刚删除了大量存储过程,想确认有没有遗漏,找出活跃的存储过程(也就是正在被使用或近期被调用的)确实是个靠谱的思路。不同数据库系统的查询方法不太一样,我给你分主流情况说明:

针对不同数据库的查询方法

1. SQL Server

SQL Server提供了系统视图可以跟踪正在执行的存储过程,也能查看近期的调用统计:

  • 查询当前正在运行的存储过程
    通过关联执行请求和SQL文本视图,精准定位正在执行的存储过程:
SELECT 
    session_id,
    DB_NAME(database_id) AS DatabaseName,
    OBJECT_NAME(objectid, database_id) AS ActiveStoredProc,
    start_time,
    status
FROM sys.dm_exec_requests
CROSS APPLY sys.dm_exec_sql_text(sql_handle)
WHERE OBJECT_NAME(objectid, database_id) IS NOT NULL
AND OBJECTPROPERTY(objectid, 'IsProcedure') = 1;
  • 查询近期被调用过的存储过程
    这个需要SQL Server开启了统计信息(默认是开启的),能看到存储过程的执行次数和最后运行时间:
SELECT 
    OBJECT_NAME(object_id) AS StoredProcName,
    execution_count AS ExecutionCount,
    last_execution_time AS LastRunTime
FROM sys.dm_exec_procedure_stats
WHERE database_id = DB_ID(); -- 替换成你要查询的数据库ID,或者保留DB_ID()查当前库

2. MySQL

MySQL可以通过进程列表和性能模式来追踪存储过程的使用情况:

  • 查询当前正在执行的存储过程
    过滤进程列表中调用存储过程的语句:
SELECT 
    ID,
    USER,
    DB,
    COMMAND,
    TIME,
    INFO
FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE COMMAND = 'Query' 
AND INFO LIKE '%CALL %'; -- 匹配调用存储过程的语句
  • 查看存储过程的调用统计
    需要先开启performance_schema,之后就能看到执行次数和最后运行时间:
SELECT 
    OBJECT_NAME AS StoredProcName,
    COUNT_STAR AS ExecutionCount,
    LAST_TIMESTAMP AS LastRunTime
FROM performance_schema.events_statements_summary_by_object
WHERE OBJECT_TYPE = 'PROCEDURE'
AND SCHEMA_NAME = 'your_database_name'; -- 替换成你的目标数据库名

3. PostgreSQL

PostgreSQL可以通过系统视图查询当前运行的进程,以及存储过程的执行统计:

  • 查询当前正在运行的存储过程
    过滤出调用存储过程或函数的活跃会话:
SELECT 
    pid,
    datname AS DatabaseName,
    usename,
    query_start,
    query
FROM pg_stat_activity
WHERE query LIKE '%CALL %' OR query LIKE '%SELECT %()%'; -- 匹配存储过程/函数调用语句
  • 查看近期执行的存储过程统计
    通过用户存储过程的统计视图,了解调用情况:
SELECT 
    proname AS StoredProcName,
    calls AS ExecutionCount,
    last_call AS LastRunTime
FROM pg_stat_user_procedures
WHERE schemaname = 'public'; -- 替换成你的目标模式名
额外建议
  • 这些查询大多需要相应的权限,比如SQL Server需要VIEW SERVER STATE权限,MySQL需要SELECT ON performance_schema权限,如果报错可以联系DBA申请权限。
  • 除了查询活跃存储过程,还建议检查你的应用代码、定时任务(比如SQL Server Agent Jobs、MySQL Events)里有没有引用已删除的存储过程,避免遗漏。
  • 对于长期未被调用的存储过程,结合统计信息可以判断是否已经废弃,进一步确认删除的完整性。

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

火山引擎 最新活动