Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何确定InnoDB表上次更改的时间?_Mysql_Innodb - Fatal编程技术网

Mysql 如何确定InnoDB表上次更改的时间?

Mysql 如何确定InnoDB表上次更改的时间?,mysql,innodb,Mysql,Innodb,我曾经成功地将数据库查询的(经过大量处理的)结果存储在memcached中,并将基础表的上次更新时间作为缓存键的一部分。对于MyISAM表格,上次更改的时间可在显示表格状态中找到。不幸的是,InnoDB表通常为空 在MySQL 4.1中,InnoDB在其SHOW TABLE STATUS行中的ctime通常是其实际的上次更新时间,但在MySQL 5.1中似乎并非如此 表中有一个DATETIME字段,但它只显示行被修改的时间-它不能显示不再存在的行的删除时间!所以,我真的不能使用MAX(更新时间)

我曾经成功地将数据库查询的(经过大量处理的)结果存储在memcached中,并将基础表的上次更新时间作为缓存键的一部分。对于MyISAM表格,上次更改的时间可在
显示表格状态中找到。不幸的是,InnoDB表通常为空

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

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

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

经过一段时间的研究,我得出的结论是,不可能像我希望的那样以最低的成本获得这些信息。我可能会缓存数据,直到我希望表发生更改(每天更新一次)为止,并让查询缓存尽可能地提供帮助

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

  • 如果每个文件使用一个表(
    innodb\u file\u per\u table
    ),请统计底层文件。您可以编写一个MySQL函数/扩展来实现这一点。由于数据库缓存的原因,这可能会稍微滞后
  • 可以使用“更新后”、“删除”和“插入”触发器来保存您自己的元数据表,其中包含您所关心的每个表的上次更新时间

  • 我个人建议使用第二种方法,因为它更具可移植性,并且不依赖于实现细节(例如
    innodb_file_per_table
    )。

    如果您对数据库何时更改并不感兴趣,但想知道是否有一个数据库表被更改,那么您应该查看MySQL


    希望这能有所帮助。

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

    ADD COLUMN `last_update` TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
    

    我有来自mysql文档的解决方案 要确保stats innodb持久活动,请执行以下步骤:

  • 使用检查innodb stats持久设置
  • 检查mysql.innodb_table_stats中上次编辑的表
  • 选择*
    从mysql.innodb_表_stats
    
    如果选择关于InnoDB触发器的第2条路线,请记住:“注意,当前,级联外键操作不会激活触发器。”(from)这仅在特定行更新时显示。虽然您可以从表中执行“SELECT MAX(last_update)”,但对于一个包含大量行的表来说,这可能会增加大量开销,只为了获得最新修改的timeAwesome,这正是我所需要的!慢。。。2万行这需要0.3秒,太糟糕了
    SHOW VARIABLES like 'innodb_stats_persistent';
    
    # Should result is ON.