【发布时间】:2010-11-14 19:00:34
【问题描述】:
我有一个 MySQL 集群设置,有 2 个数据节点和 1 个管理节点。我们现在在进行插入时在数据节点上遇到错误。
ERROR 1114 (HY000): 表 'users' 已满
感谢任何帮助,这是配置问题,如果是,哪个节点?每个节点都是一个 Ubuntu 9 服务器。
【问题讨论】:
标签: mysql mysql-management database-cluster
我有一个 MySQL 集群设置,有 2 个数据节点和 1 个管理节点。我们现在在进行插入时在数据节点上遇到错误。
ERROR 1114 (HY000): 表 'users' 已满
感谢任何帮助,这是配置问题,如果是,哪个节点?每个节点都是一个 Ubuntu 9 服务器。
【问题讨论】:
标签: mysql mysql-management database-cluster
答案在这里: http://dev.mysql.com/doc/refman/5.0/en/faqs-mysql-cluster.html#qandaitem-B-10-1-13
简而言之:ndb 引擎将所有数据保存在 RAM 中。如果您的节点有 1GB 的 RAM,而您正在尝试加载 4GB 的数据库,那么您(几乎)不走运。
有一种方法可以将 ndb 配置为使用磁盘存储数据,以便 RAM 仅用于存储索引(它们仍然必须存储在 RAM 中),方法如下: http://dev.mysql.com/doc/refman/5.1/en/mysql-cluster-disk-data-objects.html
但是,如果你这样做,你会得到低得多的性能。
【讨论】:
以防万一有人忽略了这个问题,这个问题的根本原因是MaxNoOfConcurrentOperations 的值,它应该与表预期保存的行数一起相应地提高。
以下应该是这个问题的解决方案。
将表初始创建的 CREATE TABLE 更改为包含 MAX_ROWS 值,使其成为该表预期保存的行数的两倍。
将MaxNoOfConcurrentOperations 和MaxNoOfConcurrentTransactions 的值增加到高于集群中最大表的值。这可能是因为 MySQL Cluster 在对大表应用任何操作时并行处理所有行。
【讨论】:
检查innodb_data_file_path 设置 - 此错误表明您已超出该键中定义的可用空间。检查 this link 以重新定义 InnoDB 的空间。
或者,您可能只是用完存储数据的分区上的磁盘空间。
【讨论】:
当我只加载数据库表的结构时,我遇到了同样的错误。这意味着 DataMemory 或 IndexMemory 在这里没有帮助。
此外,MaxNoOfTables 中的表格数量也没有达到限制,所以这也不是问题。
我的解决方案是增加 MaxNoOfOrderedIndexes 和 MaxNoOfUniqueHashIndexes 的值,这反映了集群中可以拥有的最大索引数。因此,如果您的数据库中有很多索引,请尝试相应地增加这些变量。
当然,更改生效后必须进行[滚动重启][1]!
我希望这可能对某人有所帮助!
【讨论】: