集群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树索引,它们应该会有所帮助,但性能仍然不如简单的主机实例好。感谢您的回答和解决问题的建议。我没有选择它作为公认的答案,因为它实际上并没有回答这个问题,所以我希望其他人能够参与这个问题(“为什么解释查询使用不同的引擎返回不同的结果”)。