集群MySQL环境中运行缓慢的查询

集群MySQL环境中运行缓慢的查询,mysql,Mysql,我有一个非常简单的查询,直接相当于 从sometable t中选择*,其中somecol='somevalue'顺序由createdon DESC LIMIT 020000确定 当我在非集群开发机器上运行此查询时,它将在0.07秒内运行,以返回14k行结果集。当我在我们的一个集群负载平衡服务器上运行相同的查询时,需要半个多小时才能完成(如果完成的话)。两种环境中的数据完全相同 对集群框上的查询运行EXPLAIN返回一个'row'值6,而如果在我的开发机器上运行EXPLAIN,则返回一个row值1

我有一个非常简单的查询,直接相当于

从sometable t中选择*,其中somecol='somevalue'顺序由createdon DESC LIMIT 020000确定

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

对集群框上的查询运行EXPLAIN返回一个'row'值6,而如果在我的开发机器上运行EXPLAIN,则返回一个row值11177

有人能解释一下为什么会发生这种情况吗?我怀疑这是由于集群或网络延迟/同步问题造成的,但我不知道如何进行故障排除/诊断

以下是有关设置的更多信息:

  • 表中的行总数约为19k,因此它甚至没有达到
    限制
    限制
  • MySQL版本为MySQL服务器:5.1.56-ndb-7.1.15a-cluster-gpl
  • Ubuntu 11.04(GNU/Linux 2.6.38-8服务器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;

谢谢。

< P>首先,你可能想考虑一下,如果你真的需要MySQL集群,它的性能和复杂性是很多人选择不使用它的原因。一对MySQL主复制或主从复制对于许多商店来说已经足够好了。其次,如果您必须使用当前的体系结构,您可以在“somecol”列上添加索引,首先尝试哈希,然后尝试B树索引,它们应该会有所帮助,但性能仍然不如简单的主机实例好。

感谢您的回答和解决问题的建议。我没有选择它作为公认的答案,因为它实际上并没有回答这个问题,所以我希望其他人能够参与这个问题(“为什么解释查询使用不同的引擎返回不同的结果”)。