记录数据库表、函数、存储过程、视图等的使用情况

Posted

技术标签:

【中文标题】记录数据库表、函数、存储过程、视图等的使用情况【英文标题】:Log usage of database tables, functions, stored procedures, views etc 【发布时间】:2009-08-03 08:49:04 【问题描述】:

我在一个基于 SQL Server 数据库的系统上工作,该数据库已经开发了很多年。它的数据量不是很大(几 GB),但它有很多复杂性(数百个表,数百个存储过程)。

我想从清理不再使用的东西开始。我们有一个每周/每月/每季度/每年的周期,这意味着有些东西一年都不会使用。但是,如果有几个月没有使用的东西的简短列表,我们也许可以通过检查来决定它们是否仍然有用。

我的意图是开始记录对所有数据库对象的访问。我有一些想法,但我想要的是一个日志,我可以把它变成一个没有被使用的东西的列表。我有一些想法,但我想要一些专家的帮助。

edit :我还想澄清一下,我想查看对表/视图的访问以及存储的过程和函数。

【问题讨论】:

你的数据库服务器软件是什么? Sql Server 2005/2008。我们都有。 【参考方案1】:

这是一个类似的问题,专门询问何时使用存储过程: How do I log the frequency and last-used time for a stored procedure?

【讨论】:

啊,是的。我没看到那个。但是我有一些代码可以用日志语句标记所有存储的过程。但是,我还想记录表和视图访问。我考虑过将日志记录触发器添加到表和视图中以进行插入/更新/删除,但我不知道如何捕获“选择”访问。【参考方案2】:

您检查sys.dm_db_index_usage_stats:最后一个更新保留在last_user_update 列中,最后一个SELECT 保留在last_user_seeklast_user_scanlast_user_lookup 之一中。请注意,计数器会在 SQL Server 启动时重置,因此您需要运行应用程序并对每个功能进行全面测试以获得相关结果。

对于存储过程,您应该启动一个服务器跟踪来监视SP:Starting 事件。运行测试后,再次运行产品的每个功能,停止跟踪并使用 SQL 聚合函数计算跟踪文件中 TextData 中过程名称的不同出现次数。您使用fn_trace_gettable 读取跟踪。

【讨论】:

我忘记了动态视图,所以你得到了 +1。我不确定它是否正确。它对于查找 使用的 sprocs/tables/indexes 非常有用,但我不确定它是否能找到每个表的所有用途。不过我不确定,所以不要开枪! 这就是我所说的“彻底测试”的意思。如果您的测试电池锻炼了产品的每一个 功能,那么最后您将收集到每一个 使用过的表/索引/程序。我知道,在现实世界中,如果可能的话,提出一个测试应用程序所做的一切的测试并非易事。【参考方案3】:

我的建议是 SQL 探查器,但您需要小心运行它,因为当您运行跟踪时,它确实会引入性能开销。

【讨论】:

是的,这是我的担心。数据库服务器的负载并不重,但我认为在“batchComplete”上运行一年的跟踪可能会产生大量数据。

以上是关于记录数据库表、函数、存储过程、视图等的使用情况的主要内容,如果未能解决你的问题,请参考以下文章

视图触发器事物存储过程函数流程控制

information_schema系列五(表,触发器,视图,存储过程和函数)

information_schema系列五(表,触发器,视图,存储过程和函数)

数据库 --- 40 视图 触发器 存储过程 事务 函数

Day463.视图&存储过程&存储函数 -mysql

Day463.视图&存储过程&存储函数 -mysql