1

我正在使用以下 SQL 服务器 DMV 来找出表的最后更新时间。

USE DB_NAME 
GO

SELECT
[database_name] = DB_NAME(DB_ID())
, [table_name] = tbl.[name]
, ius.last_user_update
, ius.user_updates
, ius.last_user_seek
, ius.last_user_scan
, ius.last_user_lookup
, ius.user_seeks
, ius.user_scans
, ius.user_lookups
FROM sys.dm_db_index_usage_stats ius
INNER JOIN sys.tables tbl
    ON (tbl.OBJECT_ID = ius.OBJECT_ID)
WHERE ius.database_id = DB_ID() -- current database
ORDER BY tbl.[name]

有 1 个表,上面有 2 个索引,并且该表已被我们的每日 ETL 刷新。上面的 DMV 显示了该特定表的 2 行,但它们都在 last_user_update 列中包含 NULL。我们还没有完成任何服务器重启/清除 DMV 缓存。同一张表在我们的开发/生产环境中。奇怪的是,在 Dev 的前一天,DMV 显示了 last_user_update 值,但现在不再显示了。Prod 中的 DMV 一直显示此表的空值。相同的 DMV 适用于其他表格。

有谁知道我们如何获得这个特定表的 last_user_update 日期?谢谢!

编辑:在下面添加 DMV 查询结果:

database_name   table_name  last_user_update    user_updates    last_user_seek              last_user_scan          last_user_lookup    user_seeks  user_scans  user_lookups
DB_NAME         Emp         NULL                0               2021-04-27 07:10:46.820     NULL                    NULL                1           0           0
DB_NAME         Emp         NULL                0               2021-04-27 07:33:54.480     2021-04-27 07:10:38.063 NULL                4           3           0

编辑 2:这些表的 ETL:

  1. 删除表的索引
  2. 从应用程序数据库中提取数据,将这些数据插入到相关表中
  3. 截断相关表的空格。
  4. 将索引添加回有问题的表。

我们正在删除索引,因为这是一个数据仓库,我们每天都在重新捕获数据。

编辑3:找出问题所在。添加主键约束实际上会删除 last_update_date 的 DMV 数据。删除索引/重新创建索引不会。

谢谢大家关注这个问题:)

4

0 回答 0