У меня есть очень странная вещь, которую мы не можем понять или исправить.
Короткая версия: Некоторые очень простые 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 '%+%'