Mysql - странное поведение - PullRequest
       4

Mysql - странное поведение

1 голос
/ 24 октября 2010

У меня есть очень странная вещь, которую мы не можем понять или исправить.

Короткая версия: Некоторые очень простые SELECT-запросы в MySQL приводят к зависанию всего приложения / программы, которая сделала запрос,Тем не менее, это не соответствует.Если у меня точно такая же версия MySQL локально, с точно такой же структурой таблицы и точно такими же данными, запрос работает нормально.но при выполнении точно такого же запроса на удаленном сервере (например, через HeidiSQL) - он зависает.

Мы пишем код на C #, и мы видим там точно такое же поведение.

Длинная версия: У нас есть два удаленных сервера, REMOTE1 и REMOTE2.

REMOTE1 имеет сообщество MySQL 5.1.51.

REMOTE2 имеет MySQL 5.0.27-community-nt * ​​1015 *

Локально я запускаю MySQL 5.1.36-community.

Иногда , при выполнении определенногозапрос (перечислены ниже) на REMOTE1, приложение, которое выполняет запрос зависает.

Это происходит, например, когда я выполняю запрос с моего компьютера через HeidiSQL.Когда мой рабочий партнер выполняет ТОЧНО ту же самую вещь, используя HeidiSQL, он работает (мы находимся в одной сети).Но если мой рабочий партнер выполняет тот же запрос не из HeidiSQL, а из нашей собственной C # -программы - тогда он тоже зависает.

Наши собственные программы написаны на C #, и мы можем ясно видеть, что при отправке запроса(через MySQL-коннектор) он никогда не возвращается из этого метода, поэтому зависает.

Теперь при выполнении точно такого же запроса на REMOTE2 он работает без каких-либо проблем, как из HeidiSQL, так и из C # -кода.Ни у меня, ни у моего рабочего партнера нет проблем при выполнении одного и того же запроса на REMOTE2.

При локальном тестировании он никогда не зависает (ни через C #, ни через HeidiSQL).

Также обратите внимание:

  • мы обновили MySQL-сервер на REMOTE1 до 5.1.51, поскольку проблема существовала и в предыдущей версии
  • у моего рабочего партнера есть два компьютера, один из которыхимеет версию HeidiSQL 5.0.0.3272 и другую версию 5.1.0.3316.На обоих этих компьютерах он может выполнить запрос вручную, и он работает на REMOTE1, но не через C # -код.
  • В C # -коде мы пробовали использовать 3 разных коннектора: MySQL Connector 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 '%+%'

Ответы [ 2 ]

1 голос
/ 25 октября 2010

Есть ли вероятность того, что какая-то другая часть вашего приложения блокирует таблицу во время обновления? Ваш запрос может столкнуться с этой блокировкой, но поскольку это происходит только иногда, симптомом является система, из которой поступает запрос. Просто удар в темноте, правда, но на что-то посмотреть.

1 голос
/ 24 октября 2010

в 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; 
...