【问题标题】:To find temporary physical tables from database of SQL Server从 SQL Server 的数据库中查找临时物理表
【发布时间】:2018-11-26 10:03:04
【问题描述】:

我正在使用的数据库有 800 多个物理表,其中一些是备份/临时表,目前没有使用。

是否有任何查询可以从整个数据库中找出临时物理表?

【问题讨论】:

  • 你怎么知道它们是“临时的”?
  • 真正的临时表具有前缀“#”并且是在 tempdb 中创建的,那么您的问题中的“临时物理表”是什么?
  • 临时表的范围是会话。会话到期后,您将无法找到它们。
  • 临时表示这些表当前未使用,我们已创建用于备份目的。

标签: sql sql-server tsql temp-tables


【解决方案1】:

简短的回答是“不”。首先,没有可靠的方法来识别一个表是“备份/临时”还是“真实数据”表。 SQL Server 不关心为什么创建了一个表。

您可以做的一件事是使用index usage stats 来识别此表中的某些索引上次更新或读取的时间:

SELECT
    OBJECT_NAME(OBJECT_ID) AS TableName
    , last_user_update
    , last_user_seek
    , last_user_scan
    , last_user_lookup
    , last_system_update
    , last_system_seek
    , last_system_scan
    , last_system_lookup
FROM sys.dm_db_index_usage_stats
WHERE database_id = DB_ID()

但是,这并不可靠。这些统计信息在重新启动期间不会保留,因此您可能会错过最后一个表的使用情况。此外,您可能有一些自动索引维护,这将重建索引并且表可能看起来像使用过的一样。另外,如果它只是很少使用怎么办?只在年初,要运行去年的报表?

你能得到的一切都只是暗示可能未使用的东西。去你的同事那里问问。重命名表格并等待有人开始尖叫。但是没有可靠的方法来获取这些信息。

【讨论】:

  • >>>你可能有一些自动索引维护,这将重建索引并且表可能看起来像使用过的系统 _scan 而不是 user 搜索/扫描
  • 但是你对这个视图的信息持久性是正确的:它不仅在服务器重启时被重置,简单地将数据库状态更改为离线将重置视图
猜你喜欢
  • 2011-11-21
  • 2011-03-08
  • 1970-01-01
  • 1970-01-01
  • 2011-11-03
  • 1970-01-01
  • 2011-02-14
  • 2010-10-11
  • 2016-09-04
相关资源
最近更新 更多