私は非常に単純なクエリを持っています。これは直接同等です
SELECT * FROM sometable t WHERE somecol = 'somevalue' ORDER BY createdon DESC LIMIT 0,20000;
クラスター化されていない開発マシンでこのクエリを実行すると、0.07 秒で実行され、14k 行の結果セットが返されます。クラスター化された負荷分散サーバーの 1 つで同じクエリを実行すると、完了するまでに 30 分以上かかります (まったく完了する場合)。両方の環境のデータはまったく同じです。
クラスター化されたボックスでクエリに対して 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;
前もって感謝します。