1

理解も修正もできない非常に奇妙なことがあります。

短いバージョン: 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 '%+%'
4

2 に答える 2

1

mysqlで試しましたか

grant all privileges on mydbname.* to mydbuser@'%' identified by 'mydbpasswd'

また

grant all privileges on mydbname.* to mydbuser@'138.239.201.234' identified by 'mydbpasswd' with grant option; 
于 2010-10-24T19:23:12.737 に答える
1

更新中にアプリケーションの他の部分がテーブルをロックしている可能性はありますか? クエリがそのロックに衝突している可能性がありますが、それはたまにしか発生しないため、クエリの送信元のシステムに問題があるようです。本当に暗闇の中で突き刺すだけですが、何かを見てください。

于 2010-10-24T20:33:15.790 に答える