我正在使用以下 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:
- 删除表的索引
- 从应用程序数据库中提取数据,将这些数据插入到相关表中
- 截断相关表的空格。
- 将索引添加回有问题的表。
我们正在删除索引,因为这是一个数据仓库,我们每天都在重新捕获数据。
编辑3:找出问题所在。添加主键约束实际上会删除 last_update_date 的 DMV 数据。删除索引/重新创建索引不会。
谢谢大家关注这个问题:)