最近,我检查了我在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 --------------------------------------------
有谁知道为什么这些数据库中的所有额外空间都消失了?
答案 0 :(得分:3)
InnoDB表的“可用空间”报告为没有数据的扩展区的大小。
当表空间文件在物理上增长时,它会在一大块页面中增长,称为范围。然后逐渐插入数据以填充范围。
您刚刚在分配了新扩展区时,但在插入数据之前,可以先查询information_schema。然后在插入数据时,它会在范围内使用一些空格,并且它不再被占用(即使它只是部分填充)。
当您执行大量DELETE时,也可以清空表空间文件中间的范围。但后来INSERT重新使用了这个空闲空间。
无论哪种方式,拥有零个未占用的范围是正常的,这不是问题。如果文件需要物理增长,InnoDB可以做到这一点。
有关详细信息,请参阅: