【发布时间】:2026-01-21 02:50:02
【问题描述】:
我们企业的数据库已经有 20 多年的历史了,里面充满了垃圾,所以我们打算开始删除表和存储过程。问题是我们并不确切知道哪些是未使用的,因此我们考虑进行研究以发现它们。
我试过this answer's solution,但我认为返回的查询数是系统缓存中的。
我有一个想法,但我不知道它是否可能: - 创建一个包含 3 列的系统表:存储过程名称、执行次数和上次调用日期 - 棘手的部分:每次执行存储过程时,执行查询以插入/更新该表。
为了避免修改我们所有的存储过程(很容易超过 600 个),我想添加一个数据库触发器,但结果只能将它们链接到表,而不是存储过程。
我的问题是,有没有办法在调用任何存储过程时预先执行查询?
编辑:我们的数据库是 SQL Server
【问题讨论】:
-
我怀疑这是可能的,但你应该用你正在使用的数据库标记问题。
-
您可以使用 sql profiler 来获取所有调用的跟踪 - 然后对跟踪进行后期处理以解析出您需要的信息。虽然可能会是一个更大的痕迹。
-
这听起来像是扩展事件的工作。使用直方图目标并捕获
rpc_started(或rpc_completed)事件。查询此直方图和/或在您闲暇时制作一张表格。如果您需要有关调用的更多详细信息,请将其设为偶数文件而不是直方图。 -
@Andrew 这是个好主意,但有些存储过程可能每月执行一次,所以我打算计算 1 或 2 个月内的调用次数,然后采取相应的行动。
-
@Jeroen Monstert 我不知道那个东西存在,我一定会试一试。我会让你知道它是否有效。非常感谢:)
标签: sql sql-server stored-procedures