【问题标题】:Why are my InnoDB tables limited to 600MiB in size?为什么我的 InnoDB 表的大小限制为 600MiB?
【发布时间】:2013-11-29 23:27:17
【问题描述】:

我在 my.cnf 中有以下 InnoDB 配置选项:

innodb_file_per_table = 1

我正在用几百万行填充一个表,但在插入几分钟后,MySQL 产生以下错误:

ERROR 1114 (HY000): The table is full

.ibd 文件大小正好是 629145600 字节(是的,600*2^20)。包含 MySQL 数据的分区未满。

谁能解释一下这里发生了什么?

【问题讨论】:

标签: mysql innodb


【解决方案1】:

这不是 InnoDB 的限制 - 5.0 和 5.6 状态的文档:

在某些较旧的操作系统上,文件必须小于 2GB

在任何情况下,这都不是您遇到的限制。合并的日志文件也可以运行高达 512 GB(对于 5.6 版,5.0 为 4GB)。其他东西似乎对您的文件施加了限制:虚拟化系统、分区(如 Rahul 提到的)等等。

【讨论】:

    【解决方案2】:

    在插入这些记录时,innoDB 会创建大量临时文件(在 my.cnf 中 tmpdir 指定的目录中)。对我来说,这被设置为 /tmp,我有大约 500MiB 的可用空间。增加这个可用空间(大约 1GiB)后,错误停止发生。

    我通过在 /tmp 上安装一个空间有限的 tmpfs 反复测试了这一点。使用不同的大小范围,我能够在收到 1114 错误之前将 .ibd 文件的大小精确到大于 600MiB。 600MiB 如此精确,很难认为这是巧合,但据我所知,这是巧合。

    我应该指出,在脚本期间监控 /tmp 并没有发现任何使用它的迹象 - df 不会报告它的大小接近满。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-24
      • 2019-11-14
      • 1970-01-01
      • 2019-01-21
      • 2022-07-21
      • 2018-03-06
      • 1970-01-01
      相关资源
      最近更新 更多