2012-07-18 68 views
1

我有一个非常简单的查询,直接等同于运行缓慢的查询上的MySQL集群环境

SELECT * FROM sometable t WHERE somecol = 'somevalue' ORDER BY createdon DESC LIMIT 0,20000;

当我运行我的非群集开发机器上此查询,它在0.07运行第二个返回14k行结果集。当我在其中一个集群负载平衡服务器上运行相同的查询时,完成时间大约需要半小时(如果完成的话)。两种环境中的数据完全相同。

对群集框上的查询运行EXPLAIN返回6的“行”值,而如果我在我的开发机器上运行它,它将返回11177的行值!

任何人都可以阐明为什么会发生这种情况?我怀疑是集群或网络延迟/同步问题,但我不知道如何进行故障排除/诊断。

下面是设置一些更多的信息:

  • 行的表中的总数为〜19K,所以它甚至没有达到LIMIT限制
  • MySQL的版本MySQL服务器: 5.1.56-ndb-7.1.15a-cluster-gpl
  • Ubuntu 11.04(GNU/Linux 2.6.38-8-server x86_64)。
  • 存储引擎是NDBCLUSTER集群的时候,InnoDB我的开发机器

上的表架构如下所示,其中{X}是InnoDB的我的本地机器或NDBCLUSTER在生产服务器上。

CREATE TABLE `sometable` (
    `Id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, 
    `UserId` bigint(20) unsigned NOT NULL, 
    `Cookie` varchar(255) DEFAULT NULL, 
    `somecol` varchar(30) DEFAULT NULL, 
    `IpAddress` varchar(255) DEFAULT NULL, 
    `SomeCollection` text, 
    `someothercolumn` decimal(6,2) NOT NULL, 
    `someothercolumn2` decimal(6,2) DEFAULT NULL, 
    `Result` tinyint(4) NOT NULL, 
    `Version` tinyint(4) NOT NULL, 
    `Source` varchar(255) DEFAULT NULL, 
    `CreatedOn` datetime NOT NULL, 
    PRIMARY KEY (`Id`), 
    KEY `CreatedOnIndex` (`CreatedOn`), 
    KEY `SomeColIndex` (`somecol`), 
    KEY `ResultIndex` (`Result`), 
    KEY `SomeCol2Index` (`someothercolumn2`) 
) ENGINE={X} AUTO_INCREMENT=97043 DEFAULT CHARSET=latin1; 

在此先感谢。

回答

0

首先,您可能想要考虑一下,如果您真的需要MySQL Cluster,它的性能和复杂性就是很多人选择不使用它的原因。一对MySQL Master-Master复制或主从复制对于许多商店来说已经足够了。其次,如果你不得不继续使用你当前的架构,你可以在列“somecol”上添加索引,首先尝试HASH,然后使用B-TREE索引,它们应该有所帮助,但性能仍然不如你的简单主机实例。

+0

感谢您的回答以及解决问题的建议。我没有选择它作为公认的答案,因为它没有真正回答这个问题,所以我希望别人会考虑这个问题('为什么EXPLAIN查询返回不同引擎的不同结果')。 – keithl8041 2013-03-04 14:23:48