理解も修正もできない非常に奇妙なことがあります。
短いバージョン: MySQL のいくつかの非常に単純な SELECT クエリは、クエリを作成したアプリケーション/プログラム全体をハングさせます。ただし、一貫性がありません。ローカルにまったく同じ MySQL バージョンがあり、まったく同じテーブル構造とまったく同じデータがある場合、クエリは正常に機能します。ただし、リモートサーバーでまったく同じクエリを実行すると(HeidiSQLなどを介して)、ハングします。
私たちは C# でコードを書いていますが、そこでもまったく同じ動作が見られます。
長いバージョン: REMOTE1 と REMOTE2 の 2 つのリモート サーバーがあります。
REMOTE1 には MySQL 5.1.51-community があります。
REMOTE2 には MySQL 5.0.27-community-nt があります
ローカルで MySQL 5.1.36-community を実行しています。
REMOTE1で特定のクエリ (下記参照) を実行すると、クエリを実行しているアプリがハングすることがあります。
これは、たとえば、コンピューターから HeidiSQL 経由でクエリを実行したときに発生します。私の同僚がHeidiSQLを使用してまったく同じことをすると、うまくいきます(私たちは同じネットワーク上にいます)。しかし、私の同僚が HeidiSQL からではなく、私たち自身の C# プログラムから同じクエリを実行すると、それもハングします。
私たち自身のプログラムは C# で書かれており、(MySQL コネクタを介して) クエリを送信すると、そのメソッドから返されないため、ハングすることが明確にわかります。
これで、REMOTE2 でまったく同じクエリを実行すると、HeidiSQL と C# コードの両方からまったく問題なく動作します。REMOTE2 で同じクエリを実行しても、私も私のパートナーも問題はありません。
ローカルでテストする場合、ハングすることはありません (C# または HeidiSQL を使用しない)。
また、次の点に注意してください。
- 以前のバージョンにも問題があったため、REMOTE1 の MySQL サーバーを 5.1.51 にアップグレードしました。
- 私の同僚は 2 台のコンピューターを持っており、そのうちの 1 台には HeidiSQL バージョン 5.0.0.3272 があり、もう 1 台にはバージョン 5.1.0.3316 があります。これらのコンピューターの両方で、クエリを手動で実行でき、REMOTE1 で動作しますが、C# コードでは動作しません。
- C# コードでは、3 つの異なるコネクタ、MySQL コネクタ 5.xx、6.1.5、および 6.3.5 を試しました。何も機能していないようです。
- HeidiSQL 5.1.0.3569 に更新しましたが、同じエラーが表示されます。
何か案は?=)
テーブル構造は以下のとおりです。列「メッセージ」を除外すると、常に機能するため、その列と関係があります。
CREATE TABLE `sammessages` (
`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`externalMessageId` BIGINT(10) UNSIGNED NULL DEFAULT NULL,
`timeStamp` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
`message` TEXT NULL COLLATE 'latin1_general_ci',
`direction` SET('INCOMING','OUTGOING','EXCEPTION','LOG') NULL DEFAULT NULL,
`central` TINYINT(3) UNSIGNED NULL DEFAULT NULL,
`isCleaned` TINYINT(1) UNSIGNED NULL DEFAULT '0',
PRIMARY KEY (`id`),
INDEX `NewIndex` (`timeStamp`),
INDEX `central_timestamp` (`central`, `timeStamp`),
INDEX `direction` (`direction`)
)
ENGINE=InnoDB
ROW_FORMAT=DEFAULT
AUTO_INCREMENT=65352
そしてクエリ:
SELECT message FROM sammessages WHERE central='9' AND direction='INCOMING' AND timestamp >= '2010-10-24 04:00:00' AND timestamp <= '2010-10-24 23:00:00' AND message LIKE '%700%' AND message LIKE '%+%'