powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Firebird + fbExpress lock conflict
25 сообщений из 204, страница 2 из 9
Firebird + fbExpress lock conflict
    #40112930
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GJЗначит где-то как-то возникло условие, при котором выполнение программы прошло
по такому пути, что обошло завершение транзакции.

Не обязательно. Просто два пользователя одновременно нажали одну и ту же кнопку.
Твой план искать незавершённую транзакцию в данном случае бесполезен и только
тратит зря время. Надо сделать так чтобы этот конкретный известный тебе запрос
перестал вызывать конфликты обновления. То есть либо его устранить совсем, либо
превратить в INSERT.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Firebird + fbExpress lock conflict
    #40112934
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GJ
Как вариант, определить перед проблемным UPDATE, что транзакция уже имеется, и не стартовать новую, а выполнить в существующей. Но тут надо аккуратно все проанализировать, чтобы не напороться на какие-нибудь другие грабли.


Я даже скажу на какие. По какой-то причине стартовавший эту транзакцию модуль решит её откатить. И откатит вместе с изменениями в модуле, содержащем "проблемный" апдейт, который будет искренне уверен, что он свою задачу выполнил. Или модуль, содержащий "проблемный" апдейт закоммитит или отроллбачит транзакцию вместе с изменениями вызвавшего модуля или даже цепочки модулей. После чего "проблемными" станут запросы-коммиты-роллбаки в этой цепочке. Я правильно понимаю что dbExpress - это архитектурно что-то вроде BDE? Тогда от проблемы без рытья кода не уйти. В этой архитектуре использование одной глобальной транзакции разными модулями - это принцип, и модуль в первых строках должен определять активна транзакция или нет. Если активна - не коммитить и не роллбачить результат, пусть вызывающий решает. А если нет - стартовать и и завершать самостоятельно. Ибо один и тот же модуль может быть активирован разными путями-цепочками вызывающих с разной логикой. И вырубить опцию автостарт-автокоммит топором, во избежание. В других архитектурах тоже бывает потребность в таких фокусах, но здесь это принцип.
...
Рейтинг: 0 / 0
Firebird + fbExpress lock conflict
    #40112937
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

GJЗначит где-то как-то возникло условие, при котором выполнение программы прошло
по такому пути, что обошло завершение транзакции.

Не обязательно. Просто два пользователя одновременно нажали одну и ту же кнопку.
Твой план искать незавершённую транзакцию в данном случае бесполезен и только
тратит зря время. Надо сделать так чтобы этот конкретный известный тебе запрос
перестал вызывать конфликты обновления. То есть либо его устранить совсем, либо
превратить в INSERT.


Он бьёт себя пяткой в грудь что конфликтующие транзакции в стартованы одном экземпляре приложения. Но ты прав, ибо - никому нельзя верить, никому! Даже себе! Ведь хотел же только пукнуть...
...
Рейтинг: 0 / 0
Firebird + fbExpress lock conflict
    #40112948
GJ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GJ
Гость
Dimitry Sibiryakov

GJЗначит где-то как-то возникло условие, при котором выполнение программы прошло
по такому пути, что обошло завершение транзакции.

Не обязательно. Просто два пользователя одновременно нажали одну и ту же кнопку.
Твой план искать незавершённую транзакцию в данном случае бесполезен и только
тратит зря время.


В сообщении 22397414 я написал, что я проделал и почему сделал вывод, что транзакция именно в моем приложении. Пока не будет доказано обратное, считаю за аксиому, что изменения, послужившие причиной блокировки, сделаны в моем приложении (как вариант, в функции из dll, вызванной из моего приложения.

Dimitry Sibiryakov

Надо сделать так чтобы этот конкретный известный тебе запрос
перестал вызывать конфликты обновления. То есть либо его устранить совсем, либо
превратить в INSERT.

Давайте я немного расскажу про выполняемый код. Это все -- проведение документа. В процессе проведения выполняются всякие содержательные проверки, расчеты и т.п. На каждом этапе что-то изменяется в таблице: пересчитывается сумма, обновляется дата, меняются флажки, обозначающие какое-то изменение состояния и т.п. Цепочка действий может быть ветвистой, некоторые этапы могу выглядеть по-разному, некоторые -- вообще отсутствовать, но в любом случае -- это последовательность изменений. И каждое из них, по логике, выполняется в короткой транзакции, которая явно стартует и явно завершается. Если на каком-то этапе ХП вернула ошибку, то есть этап выполнился некорректно, соответствующая транзакция откатывается и на этом дальнейшее проведение прекращается. Тот UPDATE, на котором я ловлю конфликт, всего лишь выставляет битовый признак, означающий что документ распечатан. Я не могу заменить UPDATE на INSERT: мне надо в конкретной записи в конкретном поле значение поменять. Если я выполню этот UPDATE в рамках предыдущей транзакции, а она откатится, то ничего страшного: если бы она завершилась по ROLLBACK вовремя, то мой запрос UPDATE вообще не выполнялся бы.

Как-то так.
...
Рейтинг: 0 / 0
Firebird + fbExpress lock conflict
    #40112951
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GJТот UPDATE, на котором я ловлю конфликт, всего лишь выставляет битовый признак,
означающий что документ распечатан. Я не могу заменить UPDATE на INSERT: мне
надо в конкретной записи в конкретном поле значение поменять.

Можешь и должен. Выкинуть нафиг этот битовый признак, вместо него добавлять
запись "документ распечатан" в историю операций над документом.

Повторять так для каждой операции, которая наткнётся на конфликт. Другого пути -
нет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Firebird + fbExpress lock conflict
    #40112959
GJ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GJ
Гость
Dimitry Sibiryakov

GJТот UPDATE, на котором я ловлю конфликт, всего лишь выставляет битовый признак,
означающий что документ распечатан. Я не могу заменить UPDATE на INSERT: мне
надо в конкретной записи в конкретном поле значение поменять.

Можешь и должен. Выкинуть нафиг этот битовый признак, вместо него добавлять
запись "документ распечатан" в историю операций над документом.

Повторять так для каждой операции, которая наткнётся на конфликт. Другого пути -
нет.

Вот здесь у меня непонятки.
Допустим, я найду место, куда можно добавить информацию, что документ распечатан.
Допустим даже, что я найду в своем приложении все места, где используется поле из этой таблицы, и заменю на вызов записи из другой таблицы.
Но мое приложение -- это часть системы. И мне никто не позволит изменять все систему только потому, что в одном приложении где-то допустили ляп и в одном случае из десяти тысяч возникает lock coflict при апдейте. Так что это годится как временная мера, но не как окончательное решение. Устранять же проблему придется по-любому. И нормальным способом.
...
Рейтинг: 0 / 0
Firebird + fbExpress lock conflict
    #40112960
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GJИ нормальным способом.

Это и есть нормальный способ. Костыль для системы, которую ты не можешь поменять
всю сразу:
1. Переименовать таблицу и убрать из неё поле, вызывающее конфликт.
2. Добавить таблицу истории операций.
3. Создать view с именем старой таблицы, выбирающий из новой таблицы и таблицы
истории недостающие поля.
4. Создать триггера на этот view, которые анализируют изменения и либо изменяют
новую таблицу, либо добавляют записи в таблицу истории операций.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Firebird + fbExpress lock conflict
    #40112963
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GJ
lock coflict при апдейте
2 юзера с апдейт запросами обязательно вызовут лок конфликт, это вопрос времени и частоты, не более.
GJ
И нормальным способом.
см. выше про замену апдейта на инсерт.
GJ
я ловлю конфликт, всего лишь выставляет битовый признак
таблица подменяется на апдейтебл вью, вьюха в своих нутрях черпает данные из основной таблицы и джойнит с последней записью таблицы статусов печати. Отряд не заметит потери бойца таблицы.
...
Рейтинг: 0 / 0
Firebird + fbExpress lock conflict
    #40112964
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДС на кнопке обошел. :)
...
Рейтинг: 0 / 0
Firebird + fbExpress lock conflict
    #40112967
GJ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GJ
Гость
Dimitry Sibiryakov

Это и есть нормальный способ <...>

Игрушка "Сапер" была доработана, но после доработки иногда стал возникать глюк.
Разработчик не смог найти причину появления этого глюка, поэтому решил переписать kernel32.dll :)
Не знаю, как обстоит дело у Microsoft, но у нас мне никто не позволит переделывать структуру БД только потому, что в одном из приложений допущен ляп, который я не могу локализовать и устранить.

Ivan_Pisarevsky
2 юзера с апдейт запросами обязательно вызовут лок конфликт, это вопрос времени и частоты, не более.

Не-а... данное приложение как раз и создано для создания и проведения документа. Причем один документ создается и проводится одним экземпляром приложения. Все остальные могут документ читать, но не изменять.

* * *
Сразу расставим палочки над t
У меня есть возможность изменить код клиентского приложения, чтобы:
1. Найти, где у меня незавершенная транзакция, и завершить ее до выполнения UPDATE (оптимальный вариант).
2. Определить, что есть незавершенная программа и как-то обеспечить корректное выполнение UPDATE (принудительно закрыть предыдущую транзакцию; не стартовать новую транзакцию, а внести изменения в рамках уже имеющейся и.т.п.).
...
Рейтинг: 0 / 0
Firebird + fbExpress lock conflict
    #40112968
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GJ
ошибка не систематическая и возникает редко
Это всегда так при неожидаемых блокировках.
...
Рейтинг: 0 / 0
Firebird + fbExpress lock conflict
    #40112969
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GJСразу расставим палочки над t
У меня есть возможность изменить код клиентского приложения, чтобы:
1. Найти, где у меня незавершенная транзакция, и завершить ее до выполнения
UPDATE (оптимальный вариант).
2. Определить, что есть незавершенная программа и как-то обеспечить корректное
выполнение UPDATE (принудительно закрыть предыдущую транзакцию; не стартовать
новую транзакцию, а внести изменения в рамках уже имеющейся и.т.п.).

3. Найти все места в приложении, где при данной операции изменяется данная
таблица и свести их в один UPDATE чтобы он производился один раз за операцию.
4. Начать использовать явное управление транзакциями в данном приложении чтобы в
нём вообще осталась всего одна транзакция на всю проводку документа.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Firebird + fbExpress lock conflict
    #40112971
GJ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GJ
Гость
YuRock
GJ
ошибка не систематическая и возникает редко
Это всегда так при неожидаемых блокировках.

Поскольку только один клиент вносит изменения в документ, то случайность обусловлена не тем, что два человека одновременно решили внести правки, а проколом в работе с транзакциями. Что-то где-то поменяли в коде приложения, после чего стала иногда возникать такая вот ошибка. Условия возникновения ошибки также неизвестны. Если я смогу осмысленно воспроизвести ошибку, я тогда и с проблемой разберусь.

Вот я и повторяю постоянно: где в какой момент что запросить у сервера либо у dbExpress, чтобы локализовать ошибку или хотя бы сократить пространство поиска.

Dimitry Sibiryakov

GJСразу расставим палочки над t
У меня есть возможность изменить код клиентского приложения, чтобы:
1. Найти, где у меня незавершенная транзакция, и завершить ее до выполнения
UPDATE (оптимальный вариант).
2. Определить, что есть незавершенная программа и как-то обеспечить корректное
выполнение UPDATE (принудительно закрыть предыдущую транзакцию; не стартовать
новую транзакцию, а внести изменения в рамках уже имеющейся и.т.п.).

3. Найти все места в приложении, где при данной операции изменяется данная
таблица и свести их в один UPDATE чтобы он производился один раз за операцию.
4. Начать использовать явное управление транзакциями в данном приложении чтобы в
нём вообще осталась всего одна транзакция на всю проводку документа.


Дочка спрашивает у мамы:
- Как правильно пишется "флякончик" или "флюкончик"?
- Напиши "пизирек", - отвечает мама.
:)

Речь идет о кассовом чеке. Товар добавляется, удаляется, изменяется количество, меняются цены (включилась скидка при добавлении дисконтной карты), выполнили частичную оплату бонусами... как вы себе предлагаете выполнить это все в рамках одного апдейта? А если транзакция будет одна, то она может оказаться... э-э-э... очень долгой.
...
Рейтинг: 0 / 0
Firebird + fbExpress lock conflict
    #40112973
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GJРечь идет о кассовом чеке. Товар добавляется, удаляется, изменяется количество,
меняются цены (включилась скидка при добавлении дисконтной карты), выполнили
частичную оплату бонусами... как вы себе предлагаете выполнить это все в рамках
одного апдейта? А если транзакция будет одна, то она может оказаться... э-э-э...
очень долгой.

А если их будет несколько, то в базу попадёт только половина чека.

И что-то я не припомню чтобы пробитие чека в магазине занимало много времени.

PS: В любом случае причины проблемы, способы её локализации и устранения все уже названы. Дальше - работать исключительно тебе.
...
Рейтинг: 0 / 0
Firebird + fbExpress lock conflict
    #40112974
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GJ1. Найти, где у меня незавершенная транзакция, и завершить ее до выполнения UPDATE (оптимальный вариант).
вы реально управляете транзакциями в dbexpress?

12388228
...
Рейтинг: 0 / 0
Firebird + fbExpress lock conflict
    #40112993
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GJ
YuRock
пропущено...
Это всегда так при неожидаемых блокировках.

Поскольку только один клиент вносит изменения в документ, то случайность обусловлена не тем, что два человека одновременно решили внести правки, а проколом в работе с транзакциями. Что-то где-то поменяли в коде приложения, после чего стала иногда возникать такая вот ошибка. Условия возникновения ошибки также неизвестны. Если я смогу осмысленно воспроизвести ошибку, я тогда и с проблемой разберусь.

Вот я и повторяю постоянно: где в какой момент что запросить у сервера либо у dbExpress, чтобы локализовать ошибку или хотя бы сократить пространство поиска.

Dimitry Sibiryakov

пропущено...

3. Найти все места в приложении, где при данной операции изменяется данная
таблица и свести их в один UPDATE чтобы он производился один раз за операцию.
4. Начать использовать явное управление транзакциями в данном приложении чтобы в
нём вообще осталась всего одна транзакция на всю проводку документа.


Дочка спрашивает у мамы:
- Как правильно пишется "флякончик" или "флюкончик"?
- Напиши "пизирек", - отвечает мама.
:)

Речь идет о кассовом чеке. Товар добавляется, удаляется, изменяется количество, меняются цены (включилась скидка при добавлении дисконтной карты), выполнили частичную оплату бонусами... как вы себе предлагаете выполнить это все в рамках одного апдейта? А если транзакция будет одна, то она может оказаться... э-э-э... очень долгой.
При сохранении кассового чека UPDATE-ы запрещены.
...
Рейтинг: 0 / 0
Firebird + fbExpress lock conflict
    #40113003
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv

вы реально управляете транзакциями в dbexpress?

12388228


Ой, мамо, роди меня обратно... Это что, улучшенный гибрид BDE c MIDAS? Мичуринцы, нехорошая женщина... Убороли чесотку в носе ампутацией головы... Не надо на этом работать, это же ужос-ужос. Соболезную.
...
Рейтинг: 0 / 0
Firebird + fbExpress lock conflict
    #40113007
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Старый плюшевый мишка
kdv

вы реально управляете транзакциями в dbexpress?

12388228


Ой, мамо, роди меня обратно... Это что, улучшенный гибрид BDE c MIDAS? Мичуринцы, нехорошая женщина... Убороли чесотку в носе ампутацией головы... Не надо на этом работать, это же ужос-ужос. Соболезную.

То ж древняя фича. Её как придумали, так и забросили сразу.
...
Рейтинг: 0 / 0
Firebird + fbExpress lock conflict
    #40113014
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GJ
-- Ватсон, это был математик.
-- Почему вы твак решили, Холмс?!
-- Ватсон, это же элементарно! Он подумал прежде, чем ответить. Его ответ абсолютно правильный. Его ответ совершенно бесполезный.
:)


GJ
Опять общие слова, что лучше быть богатым и здоровым, чем бедным и больным.


GJ
Игрушка "Сапер" была доработана, но после доработки иногда стал возникать глюк.
Разработчик не смог найти причину появления этого глюка, поэтому решил переписать kernel32.dll :)


GJ
Дочка спрашивает у мамы:
- Как правильно пишется "флякончик" или "флюкончик"?
- Напиши "пизирек", - отвечает мама.


а поциент упорот...
...
Рейтинг: 0 / 0
Firebird + fbExpress lock conflict
    #40113015
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GJ,

можно операцию апдейта попробовать повторить. В обработчике исключения выполнить роллбэк (чтобы не усугублять ситуацию). Затем показать диалог с двумя кнопками "Отмена" и "Повторить попытку".
С соответствующей реакцией по каждому варианту.
Если дело действительно в случайном и редком одновременном редактировании в многопользовательском режиме - может помочь.
Ну, раз на кардинальные действия ты не желаешь идти.
...
Рейтинг: 0 / 0
Firebird + fbExpress lock conflict
    #40113016
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если очень хочется, можно:
1. Все без исключения апдейты этой таблицы (включая в триггерах и других процедураз) завернуть в процедуры;
2. Процедуры вида UPDATE; WHEN ... - и при исключении залогировать признак ошибки, ID записи, дату, имя пользователя, компьютера, экзешник и номер транзакции. Залогировать чз udf в файл или в автономной транзакции в базу.

Так же еще можно логировать в эту же таблицу логов ID этой записи перед UPDATE. Чтобы видно было, кто, собственно, заблокировал, и на ком упало.

Работы много, на пол дня.
...
Рейтинг: 0 / 0
Firebird + fbExpress lock conflict
    #40113073
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GJ
Все остальные могут документ читать, но не изменять.
А потом окажется, что факт чтения фиксируется апдейтом поля номер 125 LAST_READ в самой таблице.
...
Рейтинг: 0 / 0
Firebird + fbExpress lock conflict
    #40113077
GJ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GJ
Гость
Dimitry Sibiryakov
В любом случае причины проблемы, способы её локализации и устранения все уже названы. Дальше - работать исключительно тебе.

Причины проблемы, более-менее, очевидны.
В качестве способа устранения предложен вариант в стиле лечения головной боли посредством гильотины.
А вот про локализацию что-то особо не заметил. Или вы про трассировку? Тогда я уже объяснил, почему это неприменимо. Не знаете другого способа как определить запрос или несколько потенциальных запросов, которые могут вызвать блокировку? Так и скажите, буду сам думать.

YuRock
При сохранении кассового чека UPDATE-ы запрещены.

Вот этого я не понял. Это вопрос или утверждение? Почему UPDATE-ы запрещены? Как изменять значения полей записи?

Дегтярев Евгений
а поциент упорот...

На вопрос "Как выявить запрос, приводящий к блокировке (или незавершенную транзакцию), мне рекомендуют:
1. Писать программы хорошо, тогда таких проблем не будет.
2. Переписать систему "правильно"
А упорот, конечно же, "поциент"
Кстати, на другом форуме могли бы посоветовать еще и СУБД заменить на "нормальную" :)

ъъъъъ
Если дело действительно в случайном и редком одновременном редактировании в многопользовательском режиме - может помочь.

В том то и дело, что тут, скорее всего, не одновременное редактирование в многопользовательском режиме, а ошибка в клиентском приложении, оставляющая незавершенной транзакцию. Либо какая-то транзакция выполняется асинхронно, и иногда не успевает завершиться.

YuRock
Если очень хочется, можно:
1. Все без исключения апдейты этой таблицы (включая в триггерах и других процедураз) завернуть в процедуры;
2. Процедуры вида UPDATE; WHEN ... - и при исключении залогировать признак ошибки, ID записи, дату, имя пользователя, компьютера, экзешник и номер транзакции. Залогировать чз udf в файл или в автономной транзакции в базу.

Так же еще можно логировать в эту же таблицу логов ID этой записи перед UPDATE. Чтобы видно было, кто, собственно, заблокировал, и на ком упало.

Работы много, на пол дня.

А почему тогда логирование UPDATE на триггер не повесить? База большая, изменяться таблица может много откуда: запросами UPDATE, хранимыми процедурами, скриптами. Все места внесения изменений можем и не найти. Да и не позволит мне никто кардинально менять метаданные. Все изменения в метаданные должны вноситься только официальными обновлениями. Обосновать разработку такого обновления я не смогу.

Но, опять же скажу, 95% за то, что есть косячок в клиентском приложении, и его надо бы найти А для этого хотя бы определить запрос, который заблокировал запись. Или несколько запросов, которые могли это сделать. И от этого уже плясать.
Надо было задавать вопрос на форуме программистов на Delphi :)

Вот такой запрос может мне помочь?
Код: sql
1.
2.
3.
4.
5.
6.
SELECT
  *
FROM
  mon$statements
WHERE
  mon$transaction_id = NNN


где NNN -- ID транзакции, содержащей блокирующий запрос. Каков смысл поля MON$STATE, могу ли я в поисках интересующего меня запроса отфильтровывать записи по значению этого поля, так как они точно не при делах?

[+]
Ivan_Pisarevsky
GJ
Все остальные могут документ читать, но не изменять.
А потом окажется, что факт чтения фиксируется апдейтом поля номер 125 LAST_READ в самой таблице.

Вы предполагаете, а я знаю, что этого нет. Точнее, что это не планировалось, так что если есть такое, то чей-то косяк.
Но тогда мы нарывались бы на lock conflict в разных местах. А мы нарываемся в о дном и том же запросе UPDATE
...
Рейтинг: 0 / 0
Firebird + fbExpress lock conflict
    #40113078
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GJНе знаете другого способа как определить запрос или несколько потенциальных запросов, которые могут вызвать блокировку?
ну смотри - допустим, в софте произошла ошибка по блокировке UPDATE. Ты тут же бросаешься смотреть в mon$, кто там и что. Но пока ты делал снимок mon$, конкурирующая транзакция завершилась. Всё, концов не найти.
А трассировка дедлоков по статье, которую я привел, запускается НАДОЛГО. Именно для того чтобы найти только deadlock. И тогда что-то еще можно найти.
Так что, других вариантов нет.
...
Рейтинг: 0 / 0
Firebird + fbExpress lock conflict
    #40113080
GJ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GJ
Гость
kdv
GJНе знаете другого способа как определить запрос или несколько потенциальных запросов, которые могут вызвать блокировку?

ну смотри - допустим, в софте произошла ошибка по блокировке UPDATE. Ты тут же бросаешься смотреть в mon$, кто там и что. Но пока ты делал снимок mon$, конкурирующая транзакция завершилась. Всё, концов не найти.
А трассировка дедлоков по статье, которую я привел, запускается НАДОЛГО. Именно для того чтобы найти только deadlock. И тогда что-то еще можно найти.
Так что, других вариантов нет.
Про трассировку я и не возражал. Только тут такой нюанс, что клиентские компьютеры и сервера принадлежать не мне, а заказчику. А он может и не позволить изменять настройку серверов или запускать лишнее программное обеспечение на клиентских компьютерах. Поэтому приходиться крутиться.

По крайней мере, запрос к mon$transactions блокируюущую транзакцию поймал. Будем надеяться, что и запрос к mon$statements не оплошает.
Так как насчет mon$statements.mon$state? Могу ли я по значению этого поля определить те записи, которые заведомо не могут блокировать таблицу?
...
Рейтинг: 0 / 0
25 сообщений из 204, страница 2 из 9
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Firebird + fbExpress lock conflict
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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