我有所有InnoDB的MySQL表。
我们有多个数据库的副本分布在多个服务器上(相信我,我们在这里谈论数百个),其中很多都没有被查询。
如何获取特定数据库中所有表的MAX(LastAccessDate)列表? ESP。考虑到它们是InnoDB表。
我更愿意知道"选择"查询已运行,但会满足"插入/更新"同样,因为如果数据库长时间没有变化,它可能已经死了。
答案 0 :(得分:0)
如果您的表总是插入值,则可以为更新/插入添加触发器。在此触发器中,您可以在专用数据库中设置当前时间戳,包括插入发生的数据库的名称。
这样,数据库的唯一要求就是它支持触发器。
或者您可以查看此link:
可以从sys.tables目录视图中检索表的odify日期和创建日期。进行任何结构更改时,将更新修改日期。可以按如下方式查询:
USE [SqlAndMe]
GO
SELECT [TableName] = name,
create_date,
modify_date
FROM sys.tables
WHERE name = 'TransactionHistoryArchive'
GO
sys.tables仅显示结构更改的修改日期。如果我们需要检查表的上次更新或访问的时间,我们可以使用动态管理视图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_ * - 提供上次扫描/搜索/查找的时间
请务必注意,重新启动SQL Server服务时会重置sys.dm_db_index_usage_stats计数器。
希望这有帮助!