【问题标题】:easiest way to know when a MySQL database was last accessed了解 MySQL 数据库上次访问时间的最简单方法
【发布时间】:2015-10-17 22:48:40
【问题描述】:

我的 MySQL 表都是 InnoDB。

我们有这么多不同数据库的副本,分布在多个服务器上(相信我,我们在这里说的是数百个),其中许多根本没有被查询。

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

我宁愿知道“选择”查询是在哪里运行的,但也愿意接受“插入/更新”,因为如果一个数据库很长时间没有改变,它可能已经死了。

【问题讨论】:

    标签: mysql innodb audit information-schema


    【解决方案1】:

    如果您有一个始终插入值的表,您可以将触发器添加到更新/插入。在此触发器中,您可以在专用数据库中设置当前时间戳,包括发生插入的数据库的名称。

    这种方式对数据库的唯一要求是它支持触发器。

    或者你可以看看这个link

    可以从 sys.tables 目录视图中检索表的修改日期和创建日期。进行任何结构更改时,都会更新修改日期。可以这样查询:

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

    希望这会有所帮助!

    【讨论】:

    • 这些示例适用于 Microsoft SQL Server,而不是 MySQL。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-13
    • 2017-07-24
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    相关资源
    最近更新 更多