SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 15.10.2009 16:15:12

LAN
Участник
Зарегистрирован: 30.07.2009
Сообщений: 10

mySQL 5.0.67+MSA2003SP3: блокировка записи базы InnoDB, зависящая от значения в поле FLOAT

В базе test создаю таблицу t1 c одной записью:

USE `test`;
DROP TABLE IF EXISTS `t1`;
CREATE TABLE `t1` (
  `ID` int NOT NULL default '0',
  `RAZ` float default '0',
  PRIMARY KEY  (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251;

INSERT INTO `t1` (`ID`,`RAZ`) VALUES  (283,1.81051);

Линкую test.t1 в MSA через ODBC и, открыв ее, пытаюсь изменить поле ID. Получаю сообщение о том, что запись блокирована другим пользователем. Корректировка через запрос проходит нормально.
Повторяю предыдущие действия, но

INSERT INTO `t1` (`ID`,`RAZ`) VALUES  (283,1);

м снова пытаюсь корректировать. Всё ОК!

Экcперименты показали, что
1. В myISAM этого эффекта нет
2. В InnoDB:
   2.1. Cитуация зависит от того, какое значение я заношу в поле REZ
   2.2. Все нормально, когда вместо FLOAT ставлю DOUBLE или INTEGER

Как это можно объяснить?

Неактивен

 

#2 15.10.2009 17:35:43

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: mySQL 5.0.67+MSA2003SP3: блокировка записи базы InnoDB, зависящая от значения в поле FLOAT

А посмотрите количество соединений с базой? Не знаю, как 2003й, а у старого
аксесса были проблемы с пониманием, сколько подключений ему нужно. В частности,
он может держать одну запись открытой формой, а вторую пытаться сделать через
запрос.

Неактивен

 

#3 16.10.2009 09:17:15

LAN
Участник
Зарегистрирован: 30.07.2009
Сообщений: 10

Re: mySQL 5.0.67+MSA2003SP3: блокировка записи базы InnoDB, зависящая от значения в поле FLOAT

Соединений ровнг одно.
Дополняю:
если внутри MSA делаю запрос:
update T1 set RAZ=1.25 where ID=283
то блокировка снимается.

Неактивен

 

#4 16.10.2009 16:30:09

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: mySQL 5.0.67+MSA2003SP3: блокировка записи базы InnoDB, зависящая от значения в поле FLOAT

Сложно сказать, боюсь, что надо смотреть запросы, которые приезжают sad
Попробуйте включить --log и посмотреть, что там реально приезжает.

Неактивен

 

#5 19.10.2009 09:09:58

LAN
Участник
Зарегистрирован: 30.07.2009
Сообщений: 10

Re: mySQL 5.0.67+MSA2003SP3: блокировка записи базы InnoDB, зависящая от значения в поле FLOAT

Не в запросе дело.
Выполняю из консоли:
USE `test`;
DROP TABLE IF EXISTS `t1`;
CREATE TABLE `t1` (
  `ID` int NOT NULL default '0',
  `RAZ` float default '0',
  PRIMARY KEY  (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251;

INSERT INTO `t1` (`ID`,`RAZ`) VALUES  (283,1.81051);

Присоединяю в MSA - не могу изменить: запись блокирована.

Из консоли выполняю
UPDATE `t1` SET `RAZ`= 1.25;

Присоединяю в MSA - все в порядке, могу менять запись. А вся разница лишь в значении RAZ                                       
Причем можно назвать и еще ряд чисел, когда так происходит.
Эта штука выяснилась, когда мы качнули из MSA на 50000 записей и в ней куча FLOAT
Поменяли на DOUBLE и все работает нормально.
А как быть если все-же FLOAT?

Неактивен

 

#6 19.10.2009 21:57:27

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: mySQL 5.0.67+MSA2003SP3: блокировка записи базы InnoDB, зависящая от значения в поле FLOAT

Круто. Разумно я это никак объяснить не могу, правда. Ну то есть правильный
ответ тут: «скорее всего, это ошибка в MSA, т.к. в любых других программах
не проявляется», но почему так — интересно. Кстати, пробовали с другим
драйвером ODBC, может быть, бага в нем?

Неактивен

 

#7 20.10.2009 08:48:38

LAN
Участник
Зарегистрирован: 30.07.2009
Сообщений: 10

Re: mySQL 5.0.67+MSA2003SP3: блокировка записи базы InnoDB, зависящая от значения в поле FLOAT

Во-первых:
по поводу ODBC у меня выбор небольшой (см. мои с Вами переговоры здесь же http://sqlinfo.ru/forum/viewtopic.php?id=1635).
Самое интересное, что когда я на блокированную запись
       INSERT INTO `t1` (`ID`,`RAZ`) VALUES  (283,1.81051);
из MSA делаю запрос
       UPDATE t1 SET RAZ= 1.81051 WHERE ID=283
то блокировка уходит.

Во-вторых:
у меня такое впечатление, что на этом форуме MSA+mySQL неактуально. Может быть посоветуете другое место?

Неактивен

 

#8 20.10.2009 18:20:37

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: mySQL 5.0.67+MSA2003SP3: блокировка записи базы InnoDB, зависящая от значения в поле FLOAT

Хм, как-то это печально выглядит sad

Блокировка происходит не в сервере MySQL, Вы же можете из консоли при этом работать с
базой? Это какая-то внутренняя блокировка внутри MSA. Дело, конечно, не в значениях
FLOAT, а в каких-то ошибках. Или драйвер ODBC, или сам Access. Обновление всего лишь
сбрасывает какие-то внутренние блокировки, и все начинает работать.

Как это лечить — не известно. Если нужно продакшн-решение — переключайтесь в режим,
когда все работает (DOUBLE, Вы говорили, работает?) sad

Другое место, боюсь, не посоветую. Нужно найти где-то место, где обсуждают Аксесс...

Неактивен

 

#9 21.10.2009 09:11:34

LAN
Участник
Зарегистрирован: 30.07.2009
Сообщений: 10

Re: mySQL 5.0.67+MSA2003SP3: блокировка записи базы InnoDB, зависящая от значения в поле FLOAT

Спасибо за внимание. Тема закрыта.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson