Sql server 2005 检查SQL Server 2005中表的使用历史记录
是否有方法通过更新、删除或选择来检查表访问的统计信息?我试图找到过时的未使用的表进行数据库清理Sql server 2005 检查SQL Server 2005中表的使用历史记录,sql-server-2005,Sql Server 2005,是否有方法通过更新、删除或选择来检查表访问的统计信息?我试图找到过时的未使用的表进行数据库清理 谢谢是的-您可以创建跟踪,MSDN- 或者,如果您知道什么在访问它们(例如,通过存储过程),您可以在其中保留跟踪信息(将行添加到表中),然后您可以看到实际运行的是什么。那就不那么万无一失了——事实证明你是一个消极的人,因为你会发现很难抓住偶尔的打击 我们使用的一种方法是将表重命名,例如,重命名为'zzz_OldName',并将它们保留一段时间,定期修剪模式的该区域 是-您可以创建跟踪,MSDN- 或者
谢谢是的-您可以创建跟踪,MSDN- 或者,如果您知道什么在访问它们(例如,通过存储过程),您可以在其中保留跟踪信息(将行添加到表中),然后您可以看到实际运行的是什么。那就不那么万无一失了——事实证明你是一个消极的人,因为你会发现很难抓住偶尔的打击
我们使用的一种方法是将表重命名,例如,重命名为'zzz_OldName',并将它们保留一段时间,定期修剪模式的该区域 是-您可以创建跟踪,MSDN- 或者,如果您知道什么在访问它们(例如,通过存储过程),您可以在其中保留跟踪信息(将行添加到表中),然后您可以看到实际运行的是什么。那就不那么万无一失了——事实证明你是一个消极的人,因为你会发现很难抓住偶尔的打击
我们使用的一种方法是将表重命名,例如,重命名为'zzz_OldName',并将它们保留一段时间,定期修剪模式的该区域 据我所知,Sql Server中没有此类数据的内置统计信息。尽管您可以使用Sql事件探查器获取一段时间内的使用情况数据 据我所知,Sql Server中没有此类数据的内置统计信息。尽管您可以使用Sql事件探查器获取一段时间内的使用情况数据 您可以检查您的DMV()。如果您的表都有一个主键,那么就有一个主键索引,如果该索引从未被读取,那么您的表就根本没有被使用 但请注意:这些是动态管理视图—每次SQL Server启动时,它们都会重置为0。您可能希望查看SQL Server 2008或SQL Server 2005项目,以便在删除表之前在较长时间内捕获DMV数据:-)
Marc您可以检查您的DMV()。如果您的表都有一个主键,那么就有一个主键索引,如果该索引从未被读取,那么您的表就根本没有被使用 但请注意:这些是动态管理视图—每次SQL Server启动时,它们都会重置为0。您可能希望查看SQL Server 2008或SQL Server 2005项目,以便在删除表之前在较长时间内捕获DMV数据:-)
Marc还可以在表上设置触发器,将TableName+GetDate()存储在“WasFoundToBeUsedAfterAll”表中
您可能希望将已经存在的任何行插入,并且可能仅在现有日期已经存在24小时或更长的情况下,而不是插入多行—这将成为一个维护问题 还可以在表上设置触发器,将TableName+GetDate()存储在“wasfundtobeusedafterall”表中
-- shows table accesses since last MSSQL reboot via index stats.
-- NULL columns imply table wasnt accessed since the last restart.
SELECT
t.name AS 'Table',
Count(i.user_seeks) as 'Indexes',
SUM(i.user_seeks + i.user_scans + i.user_lookups)
AS 'Total accesses',
SUM(i.user_seeks) AS 'Seeks',
SUM(i.user_scans) AS 'Scans',
SUM(i.user_lookups) AS 'Lookups',
SUM(i.user_updates) AS 'Updates'
FROM
sys.dm_db_index_usage_stats i RIGHT OUTER JOIN
sys.tables t ON (t.object_id = i.object_id)
GROUP BY
i.object_id,
t.name
ORDER BY [Total accesses] DESC
您可能希望将已经存在的任何行插入,并且可能仅在现有日期已经存在24小时或更长的情况下,而不是插入多行—这将成为一个维护问题 +1至“zzz_OldName”的“尖叫测试”。我们用日期作为表名的后缀,这样,比如说,一个月后,我们就知道现在可以实际删除哪些表了。对于我们命名为TEMP_MyTableName_yyyyymmdd的任何“以防万一”表,情况也是如此——因此所有alpha都按TEMP*+1分组到“zzz_OldName”的“尖叫测试”。我们用日期作为表名的后缀,这样,比如说,一个月后,我们就知道现在可以实际删除哪些表了。对于我们命名为TEMP_MyTableName_yyyyymmdd的任何“以防万一”表也是如此——因此,所有alpha都是按TEMP*分组的。如果您的数据是通过存储过程存储到表中的,我不确定探查器是否有助于确定实际的表受到了什么影响——但我可能在这一点上错了!它不会,但至少会显示哪些SP已使用,哪些未使用,这将帮助您查找未使用的表。如果您的数据是通过存储过程存储到表中的,我不确定探查器是否有助于确定实际表受到了哪些影响,但我可能错了!它不会,但至少会显示哪些SP已使用,哪些未使用,这将帮助您查找未使用的表。这里有一些解释会很好。这里有一些解释会很好。
-- shows table accesses since last MSSQL reboot via index stats.
-- NULL columns imply table wasnt accessed since the last restart.
SELECT
t.name AS 'Table',
Count(i.user_seeks) as 'Indexes',
SUM(i.user_seeks + i.user_scans + i.user_lookups)
AS 'Total accesses',
SUM(i.user_seeks) AS 'Seeks',
SUM(i.user_scans) AS 'Scans',
SUM(i.user_lookups) AS 'Lookups',
SUM(i.user_updates) AS 'Updates'
FROM
sys.dm_db_index_usage_stats i RIGHT OUTER JOIN
sys.tables t ON (t.object_id = i.object_id)
GROUP BY
i.object_id,
t.name
ORDER BY [Total accesses] DESC