你好,我正在尝试将表插入到 mysql 集群,但是一段时间后出现以下错误,您能否建议如何修复此问题。
错误 1114 (HY000),位于第 2137 行:表“t_email_contacts”已满
嗨,安德鲁,这是 ALL REPORT MEMORY 的结果
Node 2: Data usage is 0%(45 32K pages of total 98048)
Node 2: Index usage is 0%(408 8K pages of total 392224)
Node 3: Data usage is 0%(45 32K pages of total 98048)
Node 3: Index usage is 0%(408 8K pages of total 392224)
它显示 0%,但我仍然收到表格已满错误,提前致谢。
- df -H 显示它尚未满。
- 我不使用 innodb 来创建表,而是使用 ndb
答案1
造成这种情况的原因有几个。
- 保存 MySQL 文件的分区已满。
df -H
将显示分区是否已满。 如果您使用的是 innodb:请参阅
innodb_data_file_path
中的my.cnf
。您可能超出了“最大”数量。例如:innodb_data_file_path = ibdata1:10M:自动扩展:最大:512M
您可以将其提高到 512 或者
:max:512m
完全删除,以使其“无限”。- 您正在向 MEMORY 表添加 INDEX(显然不是这种情况,但值得一提)。
关于NDB集群:
NDB 引擎将所有数据保存在 RAM 中。来自链接:
在 MySQL 5.0 中,集群仅在内存中。这意味着所有表数据(包括索引)都存储在 RAM 中。因此,如果您的数据占用 1 GB 空间,并且您想在集群中复制一次,则需要 2 GB 内存(每个副本 1 GB)。这是操作系统和集群计算机上运行的任何应用程序所需的内存之外的内存
如果这是原因,你可以做这但这会对性能造成影响。
MaxNoOfConcurrentOperations
检查和的值MaxNoOfConcurrentTransactions
。将它们设置为高于集群中最大表的值。检查日志文件中的相关消息(
ndb_2_trace.log
?)。如果它显示类似“节点 2:数据使用量增加到 100%”的内容,则表示内存不足。- 索引内存仅存储主键索引。
- 数据内存存储所有数据+其他索引。
- 每个表所需的内存如下:((表的大小)+(索引的大小))*(记录数)
IndexMemory
和DataMemory
是相应的设置。如果超出这些值,则会出现此错误。
每个表的最大属性数(列和索引)限制为 128。