【问题标题】:MySQL Table Full (InnoDB) - Error #1114MySQL 表已满 (InnoDB) - 错误 #1114
【发布时间】:2016-07-28 21:22:28
【问题描述】:

我有一个客户拥有相对较大(或至少不是很小)的数据集。磁盘上大约 2Gb。

当运行与此数据库一起运行的 CRM 应用程序的报告功能时,我们会遇到

Database Error Code: The table 'tablexyz' is full, Error 1114

这令人费解有几个原因。首先是它设法在页面尝试加载报告的大约 3 秒内做出决定。其他的是:

A) 这是一个 InnoDB 表,因此没有明确的行限制 (或者我错了吗?)..

B) 这是一个 x64 系统,安装了 x64 MySQL,所以 InnoDB 表的有效大小限制是文件系统的单个 文件大小限制为 4Tb..

C) 磁盘未满,大约有 700Gb 可用的。磁盘上的 ibdata1 文件为 1.89Gb,ib 日志文件为 每个 5Mb。

MySQL 我自己从源代码自定义编译的,因为客户端要求自定义 MAX_INDEXES 值 250。据我所知,这对这种情况没有影响。

为了使问题更加复杂,该表甚至不正常存在...它似乎是在此报告运行期间动态创建的临时表。或者至少我认为确实如此。在 CRM 应用程序中的整个页面加载过程中,我都无法在 MySQL 中找到该表。我不确定是否有一个我没有看到的更深层次的问题,它告诉我它已经满了?欢迎提出想法。

【问题讨论】:

  • 知道正在运行什么查询吗?
  • tmpdir 的设置是什么?它指向一个“小”文件系统?
  • 嗨 Rick,我认为 tmpdir 是在 5.7 中引入的?除非我在想别的事情。该系统运行 5.5。但除此之外,系统本身非常简单,只有一个 / mount,其中包含 /tmp /var 等。在回答你的第一个问题时,实际上不,我不知道 SQL 是什么,因为它非常深刻嵌入到一个非常复杂的预建 CMS 中。这很烦人。我很想说这是 CMS 的错误,但我宁愿先解决系统上的所有可能性。
  • tmpdir 至少可以追溯到 4.0 版。预建版本可能已选择设置它。如果my.cnf中没有设置,则有默认值。

标签: mysql database innodb


【解决方案1】:

似乎已经达到了 innodb_data_file_path 的最大大小。

这可能会有所帮助:ERROR 1114 (HY000): The table is full

【讨论】:

  • 嗨,谢谢。我在 my.cnf 中标记了“innodb_data_file_path = ibdata1:10M:autoextend”,但这并没有帮助。我还尝试了该链接中的其他一些建议,但没有取得任何积极的成功。例如“tmp_table_size=512M”和“max_heap_table_size=512M”。
  • 那些 512M 设置很危险。它们控制复杂选择中临时表的最大 memory 大小。它不仅是“每个连接”,而且是“每个 tmp 表”。因此,这些值很容易导致您耗尽 RAM。
  • @RickJames,谢谢你,仔细看看你是对的。无论如何,我现在已经撤消了这些更改,因为它们没有解决最初的问题,我宁愿不再引入任何麻烦。谢谢。
【解决方案2】:

我已经与这个问题斗争了很长一段时间。大量内存和可用磁盘空间。

最终为我解决了这个问题的是增加temptable_max_ram。随着tmp_table_sizemax_heap_table_size 的增加,这似乎阻止了临时表被推送到磁盘并因此以某种方式达到其最大大小。

当然应该考虑 Rick James 提出的问题。

【讨论】:

    猜你喜欢
    • 2019-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    • 2021-07-14
    • 2010-10-21
    • 1970-01-01
    • 2010-10-18
    相关资源
    最近更新 更多