我在这里找到了在SQL Server 2008中找到DB对象的用法的快速方法?我可以用几种方法检查SQL Server 2008 R2数据库中对象的依赖关系。
但是有没有一种方法可以知道一个对象是否被实际使用?换句话说,我看到一个存储过程使用了某个表,但是我如何知道这个存储过程是否被执行过,如果被执行过,是谁执行的?
我问这个问题是因为我来到一个地方,那里有一堆存储过程和表,没有人知道正在使用什么
对于表,可以使用索引统计信息:
SELECT getdate() AS RunTime
, DB_NAME(i.database_id) as DatabaseName
, OBJECT_NAME(i.object_id, i.database_id) as ObjectName
, *
FROM sys.dm_db_index_usage_stats AS i
WHERE object_id > 100
这适用于所有表,因为SQL Server保留索引统计,即使是堆。
存储过程更难。您可以对它们进行检测,例如:
create table SPCalls (name sysname);
go
alter procedure dbo.YourSP
as
insert SPCalls ('YourSP');
....