【问题标题】:How can I determine when an InnoDB table was last changed?如何确定上次更改 InnoDB 表的时间?
【发布时间】:2011-02-16 15:28:16
【问题描述】:

我过去曾成功地将数据库查询的(大量)处理结果存储在 memcached 中,使用基础表的最后更新时间作为缓存键的一部分。对于 MyISAM 表,上次更改时间在 SHOW TABLE STATUS 中可用。不幸的是,对于 InnoDB 表,这通常为 NULL。

在 MySQL 4.1 中,InnoDB 在其SHOW TABLE STATUS 行中的 ctime 通常是其实际的上次更新时间,但对于 MySQL 5.1 似乎并非如此。

表中有一个 DATETIME 字段,但它只显示一行被修改的时间 - 它不能显示不再存在的行的删除时间!所以,我真的不能用MAX(update_time)

这是真正棘手的部分。我有许多我确实从中读取的副本。我可以找出不依赖于实际应用更改的表的状态吗?

我在研究了一段时间后得出的结论是,不可能像我希望的那样便宜地获得这些信息。我可能会缓存数据,直到我期望表更改的时间(它每天更新一次),并让查询缓存在可能的地方提供帮助。

【问题讨论】:

    标签: mysql innodb


    【解决方案1】:

    我有来自文档 mysql https://dev.mysql.com/doc/refman/5.6/en/innodb-persistent-stats.html 的解决方案 有步骤确保 stats innodb 持久活跃:

    1. 检查 innodb stats 持久设置与
    SHOW VARIABLES like 'innodb_stats_persistent';
    
    # Result should be ON.
    
    1. 从 mysql.innodb_table_stats 检查上次编辑的表
    SELECT *
    FROM mysql.innodb_table_stats
    

    【讨论】:

      【解决方案2】:

      我建议向表中添加另一列,并让 MySQL 跟踪上次修改表的时间,如下所示:

      ADD COLUMN `last_update` TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
      

      【讨论】:

      • 这仅显示特定行的更新时间。虽然您可以执行“SELECT MAX(last_update) FROM table”,但这可能会为包含大量行的表增加大量开销,以获取最近修改时间
      【解决方案3】:

      如果您对数据库何时更改不感兴趣,但想知道是否更改了一个数据库表,您应该查看 MySQL CHECKSUM TABLE

      希望这会有所帮助。

      【讨论】:

      • 太棒了,正是我需要的!
      • 慢... 20k 行需要 0.3 秒,太糟糕了
      • 可能有帮助,但如果您只想检查表活动并且表正在以不更改行的方式更新,则校验和将是相同的。例如,表通常(但不总是)为空,校验和通常为 0。
      【解决方案4】:

      这是MySQL bug 1437415438 和底层InnoDB bug 2681

      我有两个建议(除了修补 MySQL)。

      1. 如果每个文件使用一个表 (innodb_file_per_table),请统计基础文件。您可以编写一个 MySQL 函数/扩展来执行此操作。由于数据库缓存,这可能会稍微滞后。
      2. 您可以使用 after update、delete 和 insert 触发器来保存您自己的元数据表以及您关注的每个表的最后更新时间。

      我个人建议第二个,因为它更便携,并且不依赖于实现细节(例如innodb_file_per_table)。

      【讨论】:

      • 请记住,如果采用关于 InnoDB 触发器的第二条路线:“注意目前,级联外键操作不会激活触发器。” (来自13.2.2.5. FOREIGN KEY Constraints
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-05
      • 2011-10-13
      • 2010-12-16
      • 1970-01-01
      • 2018-04-28
      • 1970-01-01
      • 2010-09-17
      相关资源
      最近更新 更多