MySQL5.5:“;“自由空间”;留桌子吗?

MySQL5.5:“;“自由空间”;留桌子吗?,mysql,innodb,Mysql,Innodb,在同一个MySQL(5.5版)服务上,我有多个数据库 其中一个数据库有一个包含29'000'000条记录(3.3 GiB)的表 当我删除一些记录时,MySQL似乎只为当前表保留可用空间。我看到into table inspector():无数据1.4 GiB 我错了,或者一个表所使用的空间从来没有被其他表或其他数据库重用过?与其他一些引擎不同,InnoDB通常不会回收可用空间,这意味着一旦达到某个大小,您的表就会永久地保留在那里。恢复此空间的一种方法是使用有点痛苦的optimizetable命

在同一个MySQL(5.5版)服务上,我有多个数据库

其中一个数据库有一个包含29'000'000条记录(3.3 GiB)的表

当我删除一些记录时,MySQL似乎只为当前表保留可用空间。我看到into table inspector():无数据1.4 GiB


我错了,或者一个表所使用的空间从来没有被其他表或其他数据库重用过?

与其他一些引擎不同,InnoDB通常不会回收可用空间,这意味着一旦达到某个大小,您的表就会永久地保留在那里。恢复此空间的一种方法是使用有点痛苦的
optimizetable
命令,该命令可以重建表并重新编制表的索引,从而释放空间


这会在持续时间内锁定表,在大型表上可能需要数小时,因此请小心使用。

您评论说您没有使用
innnob_file_per_table=1
,您应该知道“数据空闲”是整个表空间中的可用空间量(
ibdata1

  • 如果使用
    innodb\u file\u per\u table=1
    ,则每个表空间将只有一个表,报告的可用空间将用于该表空间。在这种模式下,“无数据”将仅对存储在该表空间中的单个表可用

  • 如果使用
    innodb\u file\u per\u table=0
    ,则所有表共享一个公共系统表空间(默认情况下称为
    ibdata1
    )。“无数据”可供该表空间中的任何表使用。例如,如果从表中删除或删除某个表,则释放的空间可能会被一个或多个不同的表自动使用。您不必做任何事情来将空间重新分配给其他表

    即使每个表都显示“无数据”,但实际的可用空间不是每个表专用的,也不会乘以您拥有的表数

    简而言之,它是每个表空间的可用空间,而不是每个表


“数据自由”中仅计算完全自由扩展区。数据块是1MB的数据页块。换句话说,64个连续页面,默认情况下每个页面的大小为16KB。表空间中的其他空闲页可能以较小的组存在。个别页面中可能还有一些可用空间。这两项都不包括在“无数据”统计中。

谢谢您的回复。即使我放下桌子,也会发生这种情况?如果你放下桌子并使用该选项,那么它应该会释放空间。