1

我有一件非常奇怪的事情,我们无法理解或解决。

简短版本: MySQL 中一些非常简单的 SELECT 查询会挂起进行查询的整个应用程序/程序。但是,它并不一致。如果我在本地有完全相同的 MySQL 版本,具有完全相同的表结构和完全相同的数据,则查询工作正常。但是当在远程服务器上执行完全相同的查询时(例如通过 HeidiSQL) - 它挂起。

我们正在用 C# 编写代码,我们也看到了完全相同的行为。

长版: 我们有两个远程服务器,REMOTE1 和 REMOTE2。

REMOTE1 具有 MySQL 5.1.51 社区。

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,因为以前的版本也存在问题
  • 我的工作伙伴有两台计算机,其中一台的 HeidiSQL 版本为 5.0.0.3272,另一台的版本为 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 回答