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

时间:2012-07-18 18:09:12

标签: mysql

我有一个非常简单的查询,直接等同于

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

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

对群集框上的查询运行EXPLAIN会返回“row”值为6,而如果我在我的dev机器上运行它,则返回行值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;

提前致谢。

1 个答案:

答案 0 :(得分:0)

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