InnoDB:数据免费是什么意思?

Kur*_*den 7 mysql innodb mysql-workbench

我有一个非常大的 Mysql 表,超过 25GB。Table Inspector在 MySQL Workbench 中提取概述时,我注意到该字段Data Free因为文本字段不可选择,所以我发布了它的图片。这是否意味着某种保留空间?或者它实际上是由于大小限制而导致的可用空间?或者是其他东西?

在此处输入图片说明

Ric*_*mes 7

“Data_free”是什么意思?不多。说真的,表中有几个区域有“空闲空间”;Data_free 仅指其中之一:

  • 一个 InnoDB 块正好是 16KB;块中几乎总是有一些浪费的空间。
  • BTree 中的块通常在 50% 到 100% 之间。
  • 块组(“范围”)以 8MB(?) 的块分配。您的 7MiB 是此类范围的一部分。你会经常看到4,5,6,或7,尽管主分配单元是16KB的。
  • 如果你在谈论主表空间(ibdata1),Data_free 指的是其中有多少空间是“空闲的”;这通常是一个很大的数字。

如果您愿意OPTIMIZE TABLE,该表可能会或可能不会从当前的 25.6 GiB 缩小;它甚至可以增加!7.0 MiB 可能会保持为 7,或者可能会更改为 4、5 或 6。

“这是否意味着某种保留的空间?” -- 部分是它分配空间的方式的侥幸。但大多数情况下它是一个无用的数字。如果它大于 7 MiB,那么可能会有一些空间可以通过OPTIMIZE-- _assuming it is返回给操作系统file_per_table。但是不要使用OPTIMIZE除非你同时拥有 file_per_table 和 Data_free 是表大小的重要部分。(这可能发生在大DELETE.)

“或者它实际上是由于大小限制而导致的可用空间?” -- 低于某个阈值的表一次分配16KB;超过该阈值,它们一次被分配 8MB。