Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 检查SQL Server 2005中表的使用历史记录_Sql Server 2005 - Fatal编程技术网

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