我有所有InnoDB的MySQL表。
我们有如此多的数据库副本分布在多个服务器上(相信我,我们这里说的是数百个),其中许多根本没有被查询。
我如何获得MAX(LastAccessDate)的列表,例如在一个特定的数据库中的所有表?特别是考虑到它们是InnoDB表。
我宁愿知道"选择"查询在哪里运行,但也会满足于"插入/更新",因为,如果一个数据库在很长一段时间内没有改变,它可能已经死了。
如果你有一个总是插入值的表,你可以为更新/插入添加一个触发器。在此触发器中,您可以设置专用数据库中的当前时间戳,包括发生插入的数据库的名称。
这样你的数据库的唯一要求就是它支持触发器。
或者你可以看看这个链接:
修改和创建一个表的日期可以从sys中检索。表目录视图。当进行任何结构更改时,将更新修改日期。可通过如下方式查询:
USE [SqlAndMe]
GO
SELECT [TableName] = name,
create_date,
modify_date
FROM sys.tables
WHERE name = 'TransactionHistoryArchive'
GO
系统。表格只显示结构变化的修改日期。如果我们需要检查表最近一次更新或访问是在什么时候,我们可以使用动态管理视图sys.dm_db_index_usage_stats。此DMV返回不同类型索引操作的计数和上一次执行该操作的时间。
可以这样使用:
USE [SqlAndMe]
GO
SELECT [TableName] = OBJECT_NAME(object_id),
last_user_update, last_user_seek, last_user_scan, last_user_lookup
FROM sys.dm_db_index_usage_stats
WHERE database_id = DB_ID('SqlAndMe')
AND OBJECT_NAME(object_id) = 'TransactionHistoryArchive'
GO
last_user_update -提供上次用户更新的时间
last_user_* -提供最后一次扫描/查找/查找的时间
重要的是要注意sys。dm_db_index_usage_stats计数器在SQL Server服务重启时重置。
希望这有帮助!