我有一个非常奇怪的事情,我们无法理解或解决。
简短版本: 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#-code。在REMOTE2上执行相同的查询时,我或我的工作伙伴都没有任何问题。
在本地测试时,它永远不会挂起(无论是通过C#还是HeidiSQL)。
另请注意:
任何想法? =)
表结构如下所示。当排除“消息”列时,它始终有效,因此它与该列有关。
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 '%+%'
答案 0 :(得分:1)
试过
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;
答案 1 :(得分:1)
您的应用程序的某些其他部分是否有可能在更新期间锁定表格?您的查询可能会碰到该锁定,但由于它有时只会发生,因此症状似乎是查询来自的系统。只是在黑暗中刺伤,真的,但要看一看。