如何找出 MySQL 表上次被分析的时间?

Ike*_*ker 5 mysql innodb myisam mysql-5.5

我主要对 InnoDB 感兴趣,但也对 MyISAM 感兴趣。

我环顾 information_schema 并没有在任何地方看到这些数据。

我正在使用 MySQL 5.5.16。

Rol*_*DBA 3

没有直接的控制数据可以告诉您这一点,但是您可以设置一些机制。

机制#1

如果启用了二进制日志记录,只需使用mysqlbinloggrep -i "analyze table"的输出对所有二进制日志执行a 操作即可。

机制#2

如果您启用了常规日志,只需grep -i "analyze table"对常规日志文件执行 a 并找到与命令相关的时间戳即可。

机制#3

您应该安排一个ANALYZE TABLE针对具有高写入、高更新、高删除量的所有表运行的 cronjob。这样就不需要猜测了。

机制#4

尝试设置innodb_stats_on_metadata以对 InnoDB 表何时需要进行预测ANALYZE TABLE。(参见我的Mar 26, 2012帖子: InnoDB表索引统计信息何时更新?

警告

过去我经常说ANALYZE TABLE针对InnoDB跑表是没有用的。

希望MECHANISM #4这可能就是您所需要的。

  • 我刚刚在 InnoDB 表上运行了 ANALYZE TABLE,它极大地提高了性能,所以我不同意你的观点 - 绝对不是在所有情况下都没用。 (2认同)