Firebied блокирует всю таблицу вместо одной записи
Модератор: Модераторы
Firebied блокирует всю таблицу вместо одной записи
Вопрос немного не в тот форум, но что-то 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 - т.е. меняю другую запись. Транзакции по-идее, не должны мешать друг другу.
Лазарус, компоненты:
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
А если так попробовать:
?
А если так попробовать:
Код: Выделить всё
IBConnection1.ExecuteDirect('UPDATE s78 SET s78Main="QQQ" WHERE s78Num=18');Результат тот же.
Проблема по-идее, либо в каких-то настройках соединения, либо в свойствах БД, что приводит к тому, что транзакция лочит не только изменяемую запись, а всю таблицу.
Изначально, у меня проблема в другой таблице, которую меняю из хранимой процедуры. Думал, что это связано с хранимкой, оказалось, что проблема и на простом пробном апдейте.
Проблема по-идее, либо в каких-то настройках соединения, либо в свойствах БД, что приводит к тому, что транзакция лочит не только изменяемую запись, а всю таблицу.
Изначально, у меня проблема в другой таблице, которую меняю из хранимой процедуры. Думал, что это связано с хранимкой, оказалось, что проблема и на простом пробном апдейте.
попробуйте параметры транзакции
write
read_committed
rec_version
nowait
write
read_committed
rec_version
nowait
Оно! Спасибо!DedFrend писал(а):попробуйте параметры транзакции
write
read_committed
rec_version
nowait
Дочитался, что consistency блокирует всю таблицу. Как-то сильно вскольз об этом на ибейз.ру описано...
Остался важный вопрос. Мне нужно, чтобы при чтении записи, измененной другой транзакцией с таким же уровнем изоляции, вылетало по ошибке блокировки.
Вроде как это долно решаться
write
read_committed
no_rec_version
nowait[/quote]
но что-то я не могу этого добиться. По записи вылет есть, по чтению - нет...
Что-то я вообще не припомню проблем при чтении из базы. Можно добиться, чтобы из одной транзакции не было видно, что делается в другой.
Текст с Ибейз.Ру:
NO RECORD_VERSION (константа no_rec_version) – если при чтении пакета версий записи (о версионности "в двух словах") обнаруживается non-committed версия, то выдается или deadlock (в режиме no wait) или транзакция зависает на блокировке (в режиме wait). По умолчанию для режима READ COMMITTED в IB API.
Вот такого эффекта я бы хотел добиться...
NO RECORD_VERSION (константа no_rec_version) – если при чтении пакета версий записи (о версионности "в двух словах") обнаруживается non-committed версия, то выдается или deadlock (в режиме no wait) или транзакция зависает на блокировке (в режиме wait). По умолчанию для режима READ COMMITTED в IB API.
Вот такого эффекта я бы хотел добиться...
Попробуй ткнуться сюда
https://t.me/fb_friday
Здесь остатки скрулевской ветки тусуются, в том числе и автор приводимой тобой статьи.
Пс. Что-то мне подсказывает, что компонент доступа не той системы. Я помацал его и со спокойной совестью отказался. В лазаре в OPM есть ibx4laz от tonyw, компонент капризный, но юзабильный (под линукс). Я в основном его форком пользуюсь
https://t.me/fb_friday
Здесь остатки скрулевской ветки тусуются, в том числе и автор приводимой тобой статьи.
Пс. Что-то мне подсказывает, что компонент доступа не той системы. Я помацал его и со спокойной совестью отказался. В лазаре в OPM есть ibx4laz от tonyw, компонент капризный, но юзабильный (под линукс). Я в основном его форком пользуюсь
Как-то формат телеграмканала не располагает к таким вопросам. Я полистал его - там больше выпивку обсуждаютzoltanleo писал(а):Попробуй ткнуться сюда
https://t.me/fb_friday
Здесь остатки скрулевской ветки тусуются, в том числе и автор приводимой тобой статьи.
Года 3 назад только слез с FIBL. Родные Лазаревские компоненты оказались чуть ли не в 2 раза шустрее.zoltanleo писал(а): Пс. Что-то мне подсказывает, что компонент доступа не той системы. Я помацал его и со спокойной совестью отказался. В лазаре в OPM есть ibx4laz от tonyw, компонент капризный, но юзабильный (под линукс). Я в основном его форком пользуюсь
Перелезать на что-то еще ой как неохота. Объем работ совсем не радует...
tria
Вообще-то, я тебе не просто так предлагаю телеграм-чат: там и Дмитрий Кузменко (автор статьи), и Дмитрий Еманов(один из основных девелоперов FB), и Денис Симонов (один из главных корректоров русской доки к птичке) и куча других опытных птичников, которые тебе сразу расклад дадут. А про выпивку там потому, что это "пятница"
Но дело, конечно, твое.
Насчёт компонентов, опять же, дела твое. Я сидел в дельфях на фибах, мне они тоже показалось тормозными. IBX - совсем другое дело.
Я пользуюсь форком от Юрия Копнина ака Rik (он зареган на этом форуме, можешь поискать)
http://visual-t.ru/ibexpress.html
Вообще-то, я тебе не просто так предлагаю телеграм-чат: там и Дмитрий Кузменко (автор статьи), и Дмитрий Еманов(один из основных девелоперов FB), и Денис Симонов (один из главных корректоров русской доки к птичке) и куча других опытных птичников, которые тебе сразу расклад дадут. А про выпивку там потому, что это "пятница"
Но дело, конечно, твое.
Насчёт компонентов, опять же, дела твое. Я сидел в дельфях на фибах, мне они тоже показалось тормозными. IBX - совсем другое дело.
Я пользуюсь форком от Юрия Копнина ака Rik (он зареган на этом форуме, можешь поискать)
http://visual-t.ru/ibexpress.html
Так как-то некорректно, в чат где люди отдыхают, лезть с вопросами по работе.zoltanleo писал(а):tria
Вообще-то, я тебе не просто так предлагаю телеграм-чат: там и Дмитрий Кузменко (автор статьи), и Дмитрий Еманов(один из основных девелоперов FB), и Денис Симонов (один из главных корректоров русской доки к птичке) и куча других опытных птичников, которые тебе сразу расклад дадут. А про выпивку там потому, что это "пятница"![]()
Наглости мне не хватает
tria
Смотри сам. Если тебе надо решать проблему, решай. Я пытался помочь
И вообще, неплохо бы прикладывать тестовый проект, чтобы желающие помочь не гадали на кофейной гуще, а смогли воспроизвести твою проблему. Тем более , что ты пользуешься стандартными компонентами.
Базу можно прикладывать в виде скрипта с данными, IBE позволяет это сделать в 1 клик
Смотри сам. Если тебе надо решать проблему, решай. Я пытался помочь
И вообще, неплохо бы прикладывать тестовый проект, чтобы желающие помочь не гадали на кофейной гуще, а смогли воспроизвести твою проблему. Тем более , что ты пользуешься стандартными компонентами.
Базу можно прикладывать в виде скрипта с данными, IBE позволяет это сделать в 1 клик
Выяснил, что проблема в Лазаре
В ИБЭксперте поставил настройки транзакции:
isc_tpb_read_committed
isc_tpb_no_rec_version
isc_tpb_nowait
и получил вылет по чтению.
Ковыряние исходников Лазаря пока ничего не дало.
Пишу редко, т.к. это не основная работа, по вечерам, по возможности...
В ИБЭксперте поставил настройки транзакции:
isc_tpb_read_committed
isc_tpb_no_rec_version
isc_tpb_nowait
и получил вылет по чтению.
Ковыряние исходников Лазаря пока ничего не дало.
Пишу редко, т.к. это не основная работа, по вечерам, по возможности...
