MySQL 表大小:我需要调整什么吗?

问题描述 投票:0回答:2

我有一个 InnoDB 表,现在看起来像这样:

该表大约有126GB大,但我读到InnoDB的默认值最多可以容纳64TB的数据。这是正确的吗?

我问这个问题是因为“Data Free”列与“Data Length”相比非常小,我猜很快就会变成 0。

我需要在这里做点什么吗?我的意思是 126GB 与 64 TB 相比根本不算什么。

MySQL 自己管理这一切吗?

非常感谢!

mysql innodb
2个回答
0
投票

这太期待评论了:

是的,如果只有一个文件,性能就会出现很大问题。在底层,MySQl 使用系统的文件句柄,并且只有一个进程可以写入文件。如果每个表都有一个文件,mysql每个表占用3或4个句柄。这使得(对于系统)扩展表变得更加容易。还有一个文件句柄缓存需要调整。如果没有剩余的可用文件句柄(因为它们定义得不够),MySQL 在读取或写入表时必须关闭另一个表,然后打开新表并可以使用它。但是,如果在下一次查询中需要再次使用旧表,则会发生相反的情况。而这些系统调用,例如打开和关闭文件,需要很长时间才能访问。

此外,一旦使用了磁盘空间,MySQL 就永远不会释放它。虽然内部再次使用,但磁盘上的所有内容都保持不变。

此外,如果发生错误,恢复一个表比恢复包含所有表的怪物文件更容易。

由于您有大量磁盘空间,您可以调整 ini 中的选项,然后复制表并使用 CREATE TABEL 将其复制回来,然后新表将创建为单独的文件。

您会对所实现的速度增益感到惊讶。


0
投票

默认情况下,

Data_free
不是会耗尽的有限资源。它只是物理文件中已分配的范围(1MB 连续空间)的计数,但不包含任何数据。

InnoDB 表空间通常配置为自动扩展。当前版本的MySQL默认以每表文件的方式存储数据,并且所有此类表空间都是自动扩展的。这意味着如果

data_free
用完,InnoDB 会逐渐增加文件的大小,直到存储空间耗尽。

当每表文件或通用表空间扩展时,它最初会少量增加,然后增加 4MB。

此外,当您更新和删除数据时,它可能会在表空间的页面中留下间隙。一旦这些间隙覆盖整个范围,它们就会计入该表空间的

Data_free
图中。因此,即使物理文件没有增长,
Data_free
也会不时增加和减少。

InnoDB 可以在表空间中寻址高达 64TB,但至少对于当前一代服务器,您的存储可能比这个小得多。您将比超出 InnoDB 的可寻址空间更快地填满存储空间。

© www.soinside.com 2019 - 2024. All rights reserved.