最简单的方法来了解上次访问MySQL数据库的时间

时间:2015-07-27 16:24:22

标签: mysql innodb audit information-schema

我有所有InnoDB的MySQL表。

我们有多个数据库的副本分布在多个服务器上(相信我,我们在这里谈论数百个),其中很多都没有被查询。

如何获取特定数据库中所有表的MAX(LastAccessDate)列表? ESP。考虑到它们是InnoDB表。

我更愿意知道"选择"查询已运行,​​但会满足"插入/更新"同样,因为如果数据库长时间没有变化,它可能已经死了。

1 个答案:

答案 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计数器。

希望这有帮助!