powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Informix [игнор отключен] [закрыт для гостей] / баг в informix или почему такое происходит???
13 сообщений из 13, страница 1 из 1
баг в informix или почему такое происходит???
    #37519401
LudeV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день,

вчера заметил вот какую вещь,что в любой таблице с любым типом lock mode при изменении 1 строки,другой пользователь не может изменить другую строку.

Эксперимент:

user1:
CREATE TABLE t_acc( acc CHAR(18) ) LOCK MODE ROW;
insert into t_acc values ("1");
insert into t_acc values ("2");
begin work;
update t_acc set acc="11" where acc="1"

не коммитим и не откатываем

user2:
update t_acc set acc="22" where acc="2"

He gets the following error message:
244: Could not do a physical-order read to fetch next row.
107: ISAM error: record is locked.

Это наблюдается и на 11.50 и на 11.70,так что я думаю,что это баг всех версий informix.

Ведь если я создаю таблицу с lock mode row,то и блокироваться должна строка,а не так как в этом случае.

Селект на вторую строку проходит нормально.
Единственным выходом изменения данных является изменение строки по ее rowid, тогда все работает.



Ведь так не должно быть и это неправильно или я в чем-то глубоко заблуждаюсь?
...
Рейтинг: 0 / 0
баг в informix или почему такое происходит???
    #37519410
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так было и будет во всех rdbms с блокировками, если нет индекса для where acc=.

create index t_accx1 on t_acc(acc);
...
Рейтинг: 0 / 0
баг в informix или почему такое происходит???
    #37519413
LudeV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Журавлев Денис,

а почему с индексом начинает работать?

потому что в таком случае поиск идет по индексу,а индекс использует(содержит) rowid строк,правильно?
...
Рейтинг: 0 / 0
баг в informix или почему такое происходит???
    #37519435
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LudeV, потому что без индекса СУБД перебирает все строки, одна из которых заблокирована другим пользователем.
...
Рейтинг: 0 / 0
баг в informix или почему такое происходит???
    #37519444
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
потому что без индекса субд может найти строки where acc="2" только просканировав таблицу
и вот на select * from t_acc where acc="2" (на самом деле не делается селект, там все уровнем ниже происходит), чтобы поставить блокировку и вылезает Could not do a physical-order read to fetch next row.
потому что пытаемся прочитать заблокированную строку, которая еще с acc=1
...
Рейтинг: 0 / 0
баг в informix или почему такое происходит???
    #37519461
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати в 11-х во второй сессии и set the IsolationLevel to ReadCommited поможет. Только лучше так не делать если нет понимания.
...
Рейтинг: 0 / 0
баг в informix или почему такое происходит???
    #37519581
LudeV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо всем,понял

а при read commited мы будем видеть только то,что уже закоммитилось, я понимаю это так.

потому что если поставить dirty read,то мы сможем видеть все строки,даже те,которые сейчас меняются,поскольку о изменяемых строках данные будем брать из сегментов отката(физ журнала),так?
...
Рейтинг: 0 / 0
баг в informix или почему такое происходит???
    #37519614
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LudeVспасибо всем,понял

а при read commited мы будем видеть только то,что уже закоммитилось, я понимаю это так.

потому что если поставить dirty read,то мы сможем видеть все строки,даже те,которые сейчас меняются,поскольку о изменяемых строках данные будем брать из сегментов отката(физ журнала),так?вы все понимаете неправильно, чтобы понимать правильно надо читать документацию, а не гадать.
...
Рейтинг: 0 / 0
баг в informix или почему такое происходит???
    #37519736
LudeV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Журавлев Денис,

понял. будем читать

эту тему давайте закроем
...
Рейтинг: 0 / 0
баг в informix или почему такое происходит???
    #37519808
vasilis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LudeVвчера заметил вот какую вещь,что в любой таблице с любым типом lock mode при изменении строки,другой пользователь не может изменить другую строку.
...
Это наблюдается и на .50 и на .70,так что я думаю,что это баг всех версий informix.
...
Ведь так не должно быть и это неправильно или я в чем-то глубоко заблуждаюсь?
Очень похвально ваше желание разобраться в тонкостях, в попытках провести практические опыты, в стремлении освоить новый продукт и новое направление.
Но, не спешите делать скоропалительные выводы (насчет багов, особенно в таких фундаментальных вещах).
У вас пока нет, точнее мало, базовых знаний и от этого еще будут возникать проблемы с пониманием более сложных понятий.
Чтобы сэкономить себе кучу времени на "разборки" и исправление ошибок в будущем, лучше сейчас потратить время на чтение пары книжек по Информиксу, чтобы разобраться с основными понятиями. Поверьте моему опыту тренера, это даст вам огромное удовольствие от новых открытий и понимания многих "сложных" вещей, которые довольно банальны.
Список доступной литературы на русском есть в FAQ, но лучше, и полезней, просто читать документацию, она очень хорошо и подробно написана.
Удачи.
...
Рейтинг: 0 / 0
баг в informix или почему такое происходит???
    #37520896
Фотография Andron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LudeV...
потому что если поставить dirty read,то мы сможем видеть все строки,даже те,которые сейчас меняются,поскольку о изменяемых строках данные будем брать из сегментов отката(физ журнала),так?

Это неверно. При dirty read сессия читает данные, в т.ч. которые меняют другие сессии, не принимая во внимание что некоторые из них могут быть еще не подверждены (т.е. commit или rollback для них не выполнен), потому этот уровень изоляции так называется.
В информиксе нет сегментов отката, физический журнал это другое.
...
Рейтинг: 0 / 0
баг в informix или почему такое происходит???
    #37522596
olleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я вдруг вспомнил, что можно управлять ожиданием снятия блокировки:
http://www.sql.ru/forum/actualthread.aspx?tid=687748&pg=1&mid=7541026
...
Рейтинг: 0 / 0
баг в informix или почему такое происходит???
    #37522818
LudeV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
olleg,

это используем.

просто был непонятен базовый механизм почему не инсертит
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Informix [игнор отключен] [закрыт для гостей] / баг в informix или почему такое происходит???
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]