如何预防 "note : Table does not support optimize, doing recreate + analyze instead"

how to prevent "note : Table does not support optimize, doing recreate + analyze instead"

我的问题是我 运行 mysqlcheck for InnoDB tables 在一个 Cronjob 中,如果我每次都收到一封包含数千条此类消息的电子邮件,我很容易忽略可能错误信息。

--silent 也无济于事。

到目前为止我最好的尝试是 | grep -v "note :" 但我担心我可能会剥离更重要的 "notes"...

但即便如此,mysqlcheck 仍在列出数据库中的每个 table,这已经是一个相当长的列表,仍然隐藏了可能的错误消息。

我没能找到任何关于 mysqlcheck 的退出代码的相关信息,例如,如果真的有问题就发送电子邮件。

所以问题是: "How to run mysqlcheck and just get RELEVANT output"?

简单的答案是:不要在 InnoDB 上使用 mysqlcheck。并且只使用 InnoDB。

错误信息来自OPTIMIZE TABLE,这对InnoDB几乎没有用。 (它有 一些 用于 MyISAM。)InnoDB 擅长保持其 table 的良好状态。也就是说,99.9% 的时间 OPTIMIZE 都是浪费时间。

附录

当然,InnoDB 变得支离破碎。任何 BTree 都会变得支离破碎。 (这包括 MyISAM 索引,它们是 BTree 组织的。)即使经过大量修改,BTree 也倾向于从 0% 碎片化到 平均 的 31% "free" space,然后留在那里。当然,您可以 可以 进行碎片整理以恢复它,但进一步 activity 会立即丢失它。不值得付出努力和停机时间。

这 31% 并没有转化为比微不足道的放缓更多的东西。是的,它是一大块磁盘 space,但优化需要 100% 来完成它的任务,因为它将 table 复制过来。所以,你显然有足够的磁盘 space.