mysql - 为什么 MySQL 数据库中没有空闲空间?

标签 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

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

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

最佳答案

InnoDB 表的“可用空间”报告为没有数据的范围大小。

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

您可以在刚刚分配新范围但在插入数据之前查询 information_schema。然后,当您插入数据时,它会使用 extent 中的一些空间并且不再空闲(即使它只是部分填充)。

表空间文件中间的Extents也可以在做大量DELETE时清空。但是随后的 INSERT 会重新使用该空闲空间。

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

更多详细信息,请参阅:

关于mysql - 为什么 MySQL 数据库中没有空闲空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19439198/

相关文章:

mysql - 嵌套选择查询语法不一致

python - 如何优化这个 MySQL 计数算法?

Android - 从 Assets 访问只读 sqlite 数据库

java - 是否可以保存从http读取的zip文件并直接将其保存到Databse中,而无需在java中物理创建它

mysql - Doctrine 查询无法识别简写 : building condition based queries

php - 使用搜索词 PHP 从 MySQL 中绘图。我不知道出了什么问题

php - 如何多次插入结果集?

PHP/MySQL 小规模模糊搜索

mysql多表查询

sql - postgresql 不返回特定数字标准的值