Firebied блокирует всю таблицу вместо одной записи

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Firebied блокирует всю таблицу вместо одной записи

Сообщение tria » 31.05.2022 13:10:49

Вопрос немного не в тот форум, но что-то sql.ru недоступен.
Лазарус, компоненты:
IBConnection1: TIBConnection;
q: TSQLQuery;
trn1: TSQLTransaction;

Параметры транзакции:
trn1.Params.Clear;
trn1.Params.Add('write');
trn1.Params.Add('consistency');
trn1.Params.Add('nowait');

Запрос (упрощенный, для изучения ситуации):
q.SQL.Clear;
q.SQL.Add('UPDATE s78');
q.SQL.Add('SET s78Main=''QQQ'' ');
q.SQL.Add('WHERE s78Num=18');

Запускаю программу, оставляю транзакцию незавершенной.
В другом экземпляре программы пишу WHERE s78Num=20
и при попытке выполнения запроса получаю:
- lock conflict on wait transaction
- Acqure lock for relation (s78) failed

Задача - лочить именно отдельные записи таблицы, а не всю запись.

Добавлено спустя 59 минут 19 секунд:
Извиняюсь, ошибся в копипасте. В другом экземпляре s78Num=20 - т.е. меняю другую запись. Транзакции по-идее, не должны мешать друг другу.
tria
постоялец
 
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10

Re: Firebied блокирует всю таблицу вместо одной записи

Сообщение Vadim » 31.05.2022 15:41:29

tria
А если так попробовать:
Код: Выделить всё
IBConnection1.ExecuteDirect('UPDATE s78 SET s78Main="QQQ" WHERE s78Num=18');

?
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Firebied блокирует всю таблицу вместо одной записи

Сообщение tria » 31.05.2022 19:51:29

Результат тот же.
Проблема по-идее, либо в каких-то настройках соединения, либо в свойствах БД, что приводит к тому, что транзакция лочит не только изменяемую запись, а всю таблицу.
Изначально, у меня проблема в другой таблице, которую меняю из хранимой процедуры. Думал, что это связано с хранимкой, оказалось, что проблема и на простом пробном апдейте.
tria
постоялец
 
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10

Re: Firebied блокирует всю таблицу вместо одной записи

Сообщение DedFrend » 31.05.2022 23:09:28

попробуйте параметры транзакции
write
read_committed
rec_version
nowait
DedFrend
постоялец
 
Сообщения: 156
Зарегистрирован: 25.11.2018 12:21:50

Re: Firebied блокирует всю таблицу вместо одной записи

Сообщение tria » 01.06.2022 14:22:15

DedFrend писал(а):попробуйте параметры транзакции
write
read_committed
rec_version
nowait

Оно! Спасибо!
Дочитался, что consistency блокирует всю таблицу. Как-то сильно вскольз об этом на ибейз.ру описано...
Остался важный вопрос. Мне нужно, чтобы при чтении записи, измененной другой транзакцией с таким же уровнем изоляции, вылетало по ошибке блокировки.
Вроде как это долно решаться
write
read_committed
no_rec_version
nowait[/quote]
но что-то я не могу этого добиться. По записи вылет есть, по чтению - нет...
tria
постоялец
 
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10

Re: Firebied блокирует всю таблицу вместо одной записи

Сообщение DedFrend » 02.06.2022 09:00:35

Что-то я вообще не припомню проблем при чтении из базы. Можно добиться, чтобы из одной транзакции не было видно, что делается в другой.
DedFrend
постоялец
 
Сообщения: 156
Зарегистрирован: 25.11.2018 12:21:50

Re: Firebied блокирует всю таблицу вместо одной записи

Сообщение tria » 02.06.2022 10:13:35

Текст с Ибейз.Ру:
NO RECORD_VERSION (константа no_rec_version) – если при чтении пакета версий записи (о версионности "в двух словах") обнаруживается non-committed версия, то выдается или deadlock (в режиме no wait) или транзакция зависает на блокировке (в режиме wait). По умолчанию для режима READ COMMITTED в IB API.

Вот такого эффекта я бы хотел добиться...
tria
постоялец
 
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10

Re: Firebied блокирует всю таблицу вместо одной записи

Сообщение zoltanleo » 02.06.2022 23:34:39

Попробуй ткнуться сюда

https://t.me/fb_friday

Здесь остатки скрулевской ветки тусуются, в том числе и автор приводимой тобой статьи.

Пс. Что-то мне подсказывает, что компонент доступа не той системы. Я помацал его и со спокойной совестью отказался. В лазаре в OPM есть ibx4laz от tonyw, компонент капризный, но юзабильный (под линукс). Я в основном его форком пользуюсь
Аватара пользователя
zoltanleo
постоялец
 
Сообщения: 457
Зарегистрирован: 17.10.2013 10:55:01

Re: Firebied блокирует всю таблицу вместо одной записи

Сообщение tria » 03.06.2022 14:39:48

zoltanleo писал(а):Попробуй ткнуться сюда

https://t.me/fb_friday

Здесь остатки скрулевской ветки тусуются, в том числе и автор приводимой тобой статьи.


Как-то формат телеграмканала не располагает к таким вопросам. Я полистал его - там больше выпивку обсуждают :)

zoltanleo писал(а):Пс. Что-то мне подсказывает, что компонент доступа не той системы. Я помацал его и со спокойной совестью отказался. В лазаре в OPM есть ibx4laz от tonyw, компонент капризный, но юзабильный (под линукс). Я в основном его форком пользуюсь

Года 3 назад только слез с FIBL. Родные Лазаревские компоненты оказались чуть ли не в 2 раза шустрее.
Перелезать на что-то еще ой как неохота. Объем работ совсем не радует...
tria
постоялец
 
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10

Re: Firebied блокирует всю таблицу вместо одной записи

Сообщение zoltanleo » 03.06.2022 19:36:11

tria
Вообще-то, я тебе не просто так предлагаю телеграм-чат: там и Дмитрий Кузменко (автор статьи), и Дмитрий Еманов(один из основных девелоперов FB), и Денис Симонов (один из главных корректоров русской доки к птичке) и куча других опытных птичников, которые тебе сразу расклад дадут. А про выпивку там потому, что это "пятница" ;)

Но дело, конечно, твое.

Насчёт компонентов, опять же, дела твое. Я сидел в дельфях на фибах, мне они тоже показалось тормозными. IBX - совсем другое дело.

Я пользуюсь форком от Юрия Копнина ака Rik (он зареган на этом форуме, можешь поискать)

http://visual-t.ru/ibexpress.html
Аватара пользователя
zoltanleo
постоялец
 
Сообщения: 457
Зарегистрирован: 17.10.2013 10:55:01

Re: Firebied блокирует всю таблицу вместо одной записи

Сообщение tria » 05.06.2022 09:54:11

zoltanleo писал(а):tria
Вообще-то, я тебе не просто так предлагаю телеграм-чат: там и Дмитрий Кузменко (автор статьи), и Дмитрий Еманов(один из основных девелоперов FB), и Денис Симонов (один из главных корректоров русской доки к птичке) и куча других опытных птичников, которые тебе сразу расклад дадут. А про выпивку там потому, что это "пятница" ;)


Так как-то некорректно, в чат где люди отдыхают, лезть с вопросами по работе.
Наглости мне не хватает :)
tria
постоялец
 
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10

Re: Firebied блокирует всю таблицу вместо одной записи

Сообщение zoltanleo » 05.06.2022 11:03:06

tria
Смотри сам. Если тебе надо решать проблему, решай. Я пытался помочь

И вообще, неплохо бы прикладывать тестовый проект, чтобы желающие помочь не гадали на кофейной гуще, а смогли воспроизвести твою проблему. Тем более , что ты пользуешься стандартными компонентами.
Базу можно прикладывать в виде скрипта с данными, IBE позволяет это сделать в 1 клик
Аватара пользователя
zoltanleo
постоялец
 
Сообщения: 457
Зарегистрирован: 17.10.2013 10:55:01

Re: Firebied блокирует всю таблицу вместо одной записи

Сообщение tria » 07.06.2022 23:39:37

Выяснил, что проблема в Лазаре
В ИБЭксперте поставил настройки транзакции:
isc_tpb_read_committed
isc_tpb_no_rec_version
isc_tpb_nowait
и получил вылет по чтению.
Ковыряние исходников Лазаря пока ничего не дало.
Пишу редко, т.к. это не основная работа, по вечерам, по возможности...
tria
постоялец
 
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 30

Рейтинг@Mail.ru
cron