【发布时间】: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中没有设置,则有默认值。