为什么MySQL数据库中没有可用空间?

时间:2013-10-17 23:45:44

标签: mysql sql database

最近,我检查了我在phpMyAdmin(使用WAMP)中使用的SQL数据库,并且它们都报告没有可用空间。之前不是这样,我不确定是什么导致它改变。缺少可用空间使得对数据库的调用非常非常缓慢。我重新安装了WAMP,为phpMyAdmin创建了一个新用户,并将数据库重新导入新用户,但无济于事。

以下是我用来检查空间和结果的查询:

SELECT table_schema "beek", SUM( data_length + index_length ) /1024 / 1024 "Data Base Size in MB", SUM( data_free ) /1024 /1024 "Free Space in MB"
FROM information_schema.TABLES
GROUP BY table_schema
LIMIT 0 , 30
beek
Data Base Size in MB
Free Space in MB

-------------------------------------------
beek

Data Base Size in MB 4.11813927

Free Space in MB 0.00000000

-----------------------------------------
information_schema

Data Base Size in MB 0.00976563

Free Space in MB 0.00000000

---------------------------------------
mysql

Data Base Size in MB 0.76406479

Free Space in MB 0.00000000

-------------------------------------
performance_schema

Data Base Size in MB 0.00000000

Free Space in MB 0.00000000

--------------------------------------------

有谁知道为什么这些数据库中的所有额外空间都消失了?

1 个答案:

答案 0 :(得分:3)

InnoDB表的“可用空间”报告为没有数据的扩展区的大小。

当表空间文件在物理上增长时,它会在一大块页面中增长,称为范围。然后逐渐插入数据以填充范围。

您刚刚在分配了新扩展区时,但在插入数据之前,可以先查询information_schema。然后在插入数据时,它会在范围内使用一些空格,并且它不再被占用(即使它只是部分填充)。

当您执行大量DELETE时,也可以清空表空间文件中间的范围。但后来INSERT重新使用了这个空闲空间。

无论哪种方式,拥有零个未占用的范围是正常的,这不是问题。如果文件需要物理增长,InnoDB可以做到这一点。

有关详细信息,请参阅: