我有带有一些InnoDB表的MySQL (实际上是- MariaDB)数据库。这样的表中的记录永远不会删除,只会插入和更新。记录的数量已经相当多了--大约有几百万条。我相信,这些表自创建以来从未进行过优化。
我应该优化这样的表吗?如何验证我是否应该优化这样的表?
发布于 2021-05-25 23:28:28
不幸的是,几乎没有办法知道您是否需要优化InnoDB表。
当您删除或更新行时(我知道您说过不会删除),它可能会在行的旧版本处留下空白。优化表将所有行复制到新表中,没有间隙,因此它实现了“碎片整理”,并且可能会更紧凑地存储表。
您可以运行SHOW TABLE STATUS LIKE 'tablename'\G并获得显示差距大小的报告。它在该状态结果中被报告为列data_free。但事情是这样的:data_free只包含1MB或更大的间隙。较小的差距不会被计算在内,而这些差距可能会导致大量的碎片。从字面上讲,没有办法报告小差距的总数。
那么你是否应该优化这样的表呢?也许吧!这并不是一件坏事,比如说一个月一次。
但它不是在优化时锁定表和块查询吗?是啊,算是吧。这就是为什么我使用pt-online-schema-change来运行无操作更改(使用--alter=force选项)的原因,因此它可以在任何时候完成,而不会阻塞客户端。
https://stackoverflow.com/questions/67690662
复制相似问题