我有一个非常简单的查询,直接等同于运行缓慢的查询上的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;
在此先感谢。
感谢您的回答以及解决问题的建议。我没有选择它作为公认的答案,因为它没有真正回答这个问题,所以我希望别人会考虑这个问题('为什么EXPLAIN查询返回不同引擎的不同结果')。 – keithl8041 2013-03-04 14:23:48