我在windows上安装了一个新的mysql集群(用于评估)。我使用下面的命令创建了一个表。在我将100多万条记录插入到表中之后,它给出了“表数据池是满的”异常。我有足够的硬盘空间和免费内存,100万条记录远低于表的最大行数。此外,在插入过程中,MySql RAm的使用没有增加。我假设MySql对被击中的表有一个内部缓存限制。我是否可以对集群表中的行进行禁用缓存的config.ini更改,或者对create脚本进行修改以进行同样的修改?
create table datadump (name varchar(30) not null) engine=ndb;发布于 2014-01-24 16:26:15
下面是解决您问题的MySQL文档在MySQL集群上的常见问题
原因很可能是,您的设置没有为所有表数据和所有索引(包括NDB存储引擎所需的主键)提供足够的RAM,并且在表定义不包括主键定义的情况下自动创建。还值得注意的是,所有数据节点都应该具有相同数量的RAM,因为集群中的任何数据节点都不能使用比任何单个数据节点可用的最小内存更多的内存。例如,如果有四台计算机承载群集数据节点,其中三台有3GB的RAM可用于存储群集数据,而其余的数据节点只有1GB的RAM,则每个数据节点最多可以将1GB用于MySQL群集数据和索引。在某些情况下,即使当MySQL -e "ALL REPORT MEMORYUSAGE“显示显着的免费DataMemory时,也有可能在-e客户端应用程序中获取表完全错误。您可以强制NDB为MySQL群集表创建额外的分区,从而通过使用用于create的MAX_ROWS选项为哈希索引提供更多可用内存。通常,将MAX_ROWS设置为期望存储在表中的行数的两倍就足够了。出于类似的原因,有时还会遇到数据节点在大量加载数据的节点上重新启动的问题。在MySQL集群NDB7.1及更高版本中,添加MinFreePct参数有助于解决此问题,方法是保留DataMemory和IndexMemory的一部分(默认为5%)用于重新启动。此保留内存不可用于存储NDB表或数据。
根据第3段,应该使用max_rows运行create:
create table datadump (name varchar(30) not null) engine=ndb max_rows=2000000;https://dba.stackexchange.com/questions/57489
复制相似问题