如何预防 "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.
我的问题是我 运行 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.