MySQL Cluster比InnoDB慢得多

时间:2010-10-02 08:13:37

标签: mysql performance innodb cluster-computing

我有一个非规范化的表product,大约有600万行(~2GB),主要用于查找。字段包括price, color, unitprice, weight, ...

我在color等上有BTREE索引。查询条件是从Web动态生成的,例如

select count(*) 
from product 
where color = 1 and price > 5 and price < 100 and weight > 30 ... etc

select * 
from product 
where color = 2 and price > 35 and unitprice < 110 
order by weight 
limit 25;

我曾经使用InnoDB并尝试过MEMORY表,并切换到NDB,希望能够更快地完成更多的并发查询。我有2个表具有相同的架构,索引和数据。一个是InnoDB,另一个是NDB。但结果非常令人失望:对于上面提到的查询, InnoDB比NDB快50倍。这就像0.8 seocond vs 40秒。对于此测试,我只重复运行一个选择查询。 InnoDB和NDB查询都使用color上的相同索引。

我在双Xeon 5506(总共8核),32GB内存运行CentOS 5上使用mysql-5.1.47 ndb-7.1.5。我在上面设置了2个NDB数据节点,一个MGM节点和一个MYSQL节点同一个盒子。对于我分配的每个节点,如9GB内存,还尝试了MaxNoOfExecutionThreads=8, LockPagesInMainMemory, LockExecuteThreadToCPU和许多其他配置参数,但没有运气。当NDB运行查询时,我的峰值CPU负载仅为200%,即8个核心中只有2个处于繁忙状态。大部分时间都是100%。我正在使用ndbmtd,并在数据节点日志中验证并确实生成了LQH线程。 我也尝试过解释,分析 - 它只显示Sending data大部分时间都在消耗。我也通过一些在线提供的Mysql Cluster调优文档,在我的情况下不是很有帮助。

任何人都可以对此有所了解吗?有没有更好的方法来调整NDB数据库?欣赏它!

1 个答案:

答案 0 :(得分:2)

您需要为您的应用选择合适的存储引擎。

myISAM - 经常阅读/不经常阅读。非常适合大表中的数据查找。对于复杂的索引,它是否合理,并且非常适合批量重新加载。

MEMORY - 适合快速访问相对较小且简单的表格。

InnoDB - 适合交易处理。也适用于混合读/写工作负载。

NDB - 相对不太成熟。有利于容错。

mySQL服务器本身并不是多处理器软件。因此,添加核心并不一定会提升性能。 mySQL的一个好主机是一个不错的双核系统,拥有足够的RAM和最快的磁盘IO通道和磁盘。除非您不关心查询性能,否则请勿将mySQL数据文件放在联网或共享文件系统上。

如果您在Linux上运行,请发出这两个命令(在运行mySQL服务器的计算机上),看看您是在刻录所有cpu,还是刻录所有磁盘IO:

sar -u 1 10
sar -d 1 10

您的应用程序听起来像myISAM的候选人。听起来你有很多硬件。在这种情况下,您可以构建一个主服务器和一个自动复制的从服务器但是您可能只使用一台服务器。这将更容易维护。

编辑这是八年的拉塔尔,这个答案现在基本上已经过时了。