首页 文章

优化Innodb表以释放可用空间

提问于
浏览
0

我无法在innodb表中释放空间 .

我还设置了 innodb_files_per_table=1 所以每个表都有单独的ibd文件 .

当我查询information_Schema以检查数据大小,索引大小和data_free时,它总是在某些表的data_free列中显示一些值,如7Mb . 查询:

SELECT table_schema“数据库名称”,table_name,(data_length index_length)/ 1024/1024“数据库大小,以MB为单位”,(data_free)/ 1024/1024“可用空间,以MB为单位”FROM information_schema.TABLES其中table_schema ='DB_NAME'订购4个desc限制30;

我运行优化表,也试过 alter table table_name engine='innodb' 但data_free仍然显示7Mb .

我还启用了 innodb_stats_on_metadata 来刷新统计数据,并且还执行刷新表并重新打开表,但仍然在data_free中显示7Mb .

知道如何解决这个免费空间问题吗?

1 回答

  • 1

    是的,4M / 5M / 6M / 7M "free"对于中型到大型InnoDB表是正常的 . 无论 table 大小如何,通常为4M-7M . 你无法摆脱这一点 . (这对于分区表尤其不利,因为它出现在每个分区上 . )这个空间的百分比是多少?

    小表以不同的方式分配,通常具有少于4MB的"free"空间 .

    15/16未在information_schema中的任何位置显示,大多数其他类型的“浪费”空间也未显示 . 15/16位于每个块中,并且指的是留出一些额外的空间以避免在插入行时突然发生块拆分 .

    InnoDB中各种类型的“免费”空间作为优化来提高查询的响应时间,代价是“浪费”磁盘空间 .

相关问题