2011-04-12 107 views
0

我们试图将几个Tb放入MySQL簇中,但不幸的是索引不适合内存。mysql集群表已满,解决方法?

有没有办法克服mysql的这个限制?

有没有办法在mysql进程范围内并行操作?

我的数据有128个分区的MYisam内部有一个3D点:(id x y z idkey someblob)。由于内存限制,NDBCLuster无法加载数据。

索引越过idkey(这是预先计算的peano-hilbert键)。总行数约为10^9。

谢谢阿尔曼。

编辑 我的设置是2个datanodes 2 mysqld一个mdm。 每个ndb具有4个内核的8Gb RAM。

整个系统有30Tb Raid6。
系统是linux Scientific LInux 6.0,集群7.1是从源码编译的。

+0

操作系统/硬件设置?您收到的错误消息 - 如果您提供了这些消息,它会很有用。 – 2011-04-12 20:55:18

+0

错误消息在标题中:“表'foo'已满”。 – 2012-09-24 20:50:11

回答

0

这听起来像MySQL不适合该任务(对不起)。我会检查东京暴君,也许MongoDB或任何其他分布式键值存储系统。还有专门的商业产品。

MongoDB是able to swap out some of it's indexes to the HD。我想你的问题是,MySQL不能这样做(尽管我不是MySQL的人)。

+0

是的,我们可能碰到了mysql的限制。谢谢。 – Arman 2011-04-17 10:53:23

0

也许你可以尝试修改你的config.ini文件。

DataMemory=15000M 
IndexMemory=2560M 

但是,如果两个数值都过高,你会遇到这样的错误: 无法使用,由于位图页missaligned!

所以我仍然试图解决它。祝你好运。

0

我在加载数据库表结构时遇到了同样的问题。这意味着DataMemoryIndexMemory在这里没有帮助。 此外,表格数量没有达到MaxNoOfTables的限制,所以它也不是问题。 我在这里的解决方案是增加MaxNoOfOrderedIndexesMaxNoOfUniqueHashIndexes的值,这些值反映了群集中可以拥有的最大索引数。因此,如果数据库中有很多索引,请尝试相应地增加这些变量。 当然,在更改生效后必须完成rolling restart