Mysql-表中的Data_free值不能减少

Mysql-表中的Data_free值不能减少

我们有一个大型的 MySQL5.7 生产表。我们尝试降低 Data_free 值。

我们通常只是对各种数据库表运行 Optimize 命令,将其缩小到 7MG 大小。但是,对于一个表,我们无法实现这一点(我们正在使用 innodb_file_per_table)。

有没有办法强制系统将值减小到正常大小?

显示表状态

答案1

您使用的是 ENGINE=InnoDB 吗?所讨论的表是否已分区?

MySQL 的 InnoDB 会预先分配“区段”以备插入新行。这通常(并非总是)显示为 Data_free 正好是 4MB、5MB、6MB 或 7MB。您无法摆脱它。

您是否注意到,该OPTIMIZE TABLE命令很少会大幅缩小任何表?您是否注意到该操作会阻止表上的其他活动?一般来说,该命令对 InnoDB 表毫无用处。

Data_free 是“碎片”和其他“可用”空间的唯一可见指标。不要为此烦恼。

一个PARTITIONed“表”由多个“表”组成,每个分区一个。每个子表可能有一些 Data_free。因此整个分区表可以有更大的 Data_free。同样,这个 Data_free 不能缩小(极少数情况除外)。

相关内容