powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
25 сообщений из 53, страница 1 из 3
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
    #39014336
Mironico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Deadlock. Update contlicts with сопсurеnt update.
Помогите правильно выставить настройки транзакций пожалуйста.
Читаю-читаю по транзакциям и Фибплюсовские доки и Хелен Борри и гуглю
и никак не могу понять как избавиться от этого дела.

Описание ситуации:

Есть аптека, есть программа "бьющая чеки". Процесс "закрытия чека" происходит через хранимую процедуру.
Процедура выполняется через FIBQuery. В транзакции к нему выставлено:
write
nowait
rec_version
read_committed

Таких рабочих мест в аптеке бывает до 5 и никогда конфликтов не возникало. Транзакции короткие.
И тут я на "сервер" где база добавляю прогу для передачи в центральный офис изменений.

Певая программа при выполнении ХП ставит 1 в поле "change". Ну что типо было изменение остатка.
Вторая на локальном сервере каждые 5 мин. делает выборку по этому полю "change", отправляет
инфу по остаткам на удаленный сервер и ставит признак "change" в 0, причем для каждой записи
стартуется и закрывается отдельная короткая транзакция с теми же настройками.
write
nowait
rec_version
read_committed

Конфликты возникают между ХП в первой программе и командой которая изменяет с 1 в 0 признак изменения.
Иногда выдается ошибка в первой а иногда во второй программе.

Много написал конечно но хотелось чтобы было все понятно )

Юзается Delphi+Firebird 2.0.4+FIBPlus 6.9.9.

Заранее спасибо.
...
Рейтинг: 0 / 0
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
    #39014352
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MironicoИ тут я на "сервер" где база добавляю прогу для передачи в центральный офис изменений.возьми нормальный репликатор, неблокирующий и будет тебе счастье.
Их более одного, стоят недорого.

Апдейтить исходные данные ради репликации, как по мне, так идеологически совсем неправильно.
А если надо отрепдлицировать разом в пяток других баз будешь пять раз апдейтить?
оно ж совсем сдохнет на дэдлоках.

Вот протоколирующий триггер куда приятней.
...
Рейтинг: 0 / 0
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
    #39014366
Mironico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тут все очень сложно и просто в одночасье.
Репликаторы не подходят.
Долго обьяснять.

Тут как-бы нужно добиться чтобы на хп ошибка не вылетала и она имела приоритет.
Пусть уже "репликатор" сбоит себе и перезапускает таймер, отправит в след. раз.
Вот как такого добиться не понимэ.
Игрался разными вариантами настроек но уже запарился подбирать.
...
Рейтинг: 0 / 0
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
    #39014385
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MironicoРепликаторы не подходят.Все пациенты врут.
Mironicoчтобы на хп ошибка не вылеталаапдейты зло, нет апдейта, нет и дэдлока.
MironicoДолго обьяснять.А ты попробуй сформулировать мысль письменно, пока пишешь, глядишь и решение придумаешь.
...
Рейтинг: 0 / 0
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
    #39014386
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mironico,

схема полная хрень. Ну конечно кое-что можно сделать, но поле change тут точно не в кассу. Когда остаток пересчитывается дёргай генератор и пиши новый номер. А вторая прога пусть у себя учитывает закачивала ли она остаток с таким номером или нет, а первую базу вообще не трогает.

Хотя я бы не сказал что это прямо, но по крайней мере конфиликтов поможет избежать. Нормальный репликатор конечно лучше.
...
Рейтинг: 0 / 0
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
    #39014395
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисХотя я бы не сказал что это прямокривулек можно много напридумывать, только нужно ли?

Тут самый простой вариант пристыкованная 1-1 табличка, которую апдейтит "чудо репликатор" и будет тоже самое, криво, но дэдлоков не будет.

Тут надо проектировать систему с прицелом на работу в паре с нормальным репликатором.
...
Рейтинг: 0 / 0
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
    #39014850
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mironico,

Есть еще вариант, который сразу напрашивается.
В процедуре, которая сохраняет чек, не должно быть update и delete . Это вообще закон основной. Конституция. Иначе репликация (такая кривая) - не единственное, из-за чего будут теряться чеки.

В данный момент, думаю, чем всё переделать и изменить репликацию, проще убрать из транзакции, сохраняющей чек, все update и delete. Если хочешь что-то такое сделать после чека не критичное - открывай другую транзакцию.
Если это что-то - критичное - придумывай какую-то логику, чтобы попытаться повторно выполнить это после дэдлока (например запись в буффер того, что необходимо сделать, вместе с сохранением чека, коммит чека и этого буффера, а затем попытки в другой транзакции, пока не получится).
...
Рейтинг: 0 / 0
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
    #39014870
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MironicoКонфликты возникают между ХП в первой программе и командой которая изменяет
с 1 в 0 признак изменения.
Врёшь. Или у вас существуют чеки, которые закрываются дважды.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
    #39014974
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovMironicoКонфликты возникают между ХП в первой программе и командой которая изменяет
с 1 в 0 признак изменения.
Врёшь. Или у вас существуют чеки, которые закрываются дважды.
Да нет, там скорей всего в этой же процедуре обновляются остатки, или что-то типа того.
...
Рейтинг: 0 / 0
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
    #39014981
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

да я так понимаю у него тупо остатки по товару считаются, когда чеки закрываются. Как только остаток пересчитался ставится признак пересчитан. Как только репликатор забрал изменённый остаток - признак сбрасывается. Короче полная кривизна.
...
Рейтинг: 0 / 0
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
    #39018770
Mironico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да причем тут остатки.
Есть 2 таблицы.
"Товары" и "партии".
Конечно ХП при пробитии чека снимает остатки. т.е. изменят таблицу "партии".
В Таблицу "товары" ставит при этом на нужном товаре 1.

Друагя программа в Таблицу "товары" ставит на нужном товаре 0.

Если Транзакция ХП 2-3 секунды максимум то транзакция репликатора вообще короткая.


ВОПРОС в том что при изменении таблицы "партии" несколькими кассами никаких конфликтов обновлений и близко нет.
Почему такая фигня с товарами?
...
Рейтинг: 0 / 0
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
    #39018780
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MironicoЕсть 2 таблицы.
"Товары" и "партии".
Конечно ХП при пробитии чека снимает остатки. т.е. изменят таблицу "партии".
В Таблицу "товары" ставит при этом на нужном товаре 1.

Друагя программа в Таблицу "товары" ставит на нужном товаре 0.

Если Транзакция ХП 2-3 секунды максимум то транзакция репликатора вообще короткая.


какая бы транзакция короткая не была она всё равно имеет вероятность конфликта с другой. Тебе же уже сказали схема кривая.

MironicoВОПРОС в том что при изменении таблицы "партии" несколькими кассами никаких конфликтов обновлений и близко нет.
Почему такая фигня с товарами?

да откуда нам знать что у тебя там с партиями. Может ты на разных кассах разные партии расходуешь.
...
Рейтинг: 0 / 0
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
    #39018800
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MironicoХП при пробитии чека снимает остатки. т.е. изменят таблицу "партии".
В Таблицу "товары" ставит при этом на нужном товаре 1.
Зачем она ставит 1 в таблице товаров, если не изменяет её?.. Конечно, ты нарвёшься на
конфликт когда кто-то пробивает чек на товар, который сейчас реплицируется. Поэтому не
надо реплицировать товары, достаточно реплицировать чеки.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
    #39018808
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mironicoизменении таблицы "партии" несколькими кассами никаких конфликтов обновлений и близко нет.Это тебе кажется. запусти пару-тройку сотен касс и "попрет".
Симонов Дениссхема кривая.видимо это надо повторить еще десяток раз.
...
Рейтинг: 0 / 0
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
    #39018821
Mironico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На кой мне реплицировать чеки?
Мне в офисе нужны остатки по 65 точкам максимально актуальные.
Будь везде хороший инет я бы раз в час гонял все остатки и не парился бы.
А так приходится раз в 10 мин. обновлять только измененные.
Поскольку у меня никогда никаких дедлоков не было решил что проще всего в товарах
добавить признак изменения в остатка в партиях.
Пробивается чек - меняется остаток в партиях - ставится 1 в товарах.
по таймауту запускается репликатор - выбирает из товаров позиции с 1 - отправляет изменения на сервер - ставит 0.
И вот нарвался.

Сейчас думаю как переделать.
...
Рейтинг: 0 / 0
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
    #39018824
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MironicoСейчас думаю как переделать.Триггер!
...
Рейтинг: 0 / 0
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
    #39018827
Mironico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для чего триггер
...
Рейтинг: 0 / 0
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
    #39018838
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MironicoБудь везде хороший инет я бы раз в час гонял все остатки и не парился
бы.
Угадай с трёх раз почему off-line репликация была изобретена.

MironicoПробивается чек - меняется остаток в партиях - ставится 1 в товарах.
по таймауту запускается репликатор - выбирает из товаров позиции с 1 - отправляет
изменения на сервер - ставит 0.

Достаточно вторую часть заменить на "по таймауту запускается репликатор - выбирает новые
чеки, суммирует их - отправляет изменения на сервер - сбрасывает признак новизны".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
    #39018873
Mironico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне не продажи нужны (не чеки).
Мне нужны остатки из партий.
...
Рейтинг: 0 / 0
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
    #39018895
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MironicoМне не продажи нужны (не чеки).
Мне нужны остатки из партий.
Ты не поверишь, но новые остатки получаются из сложения старых остатков с продажами.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
    #39018911
Mironico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А зачем этот мартышкин труд для компа если есть готовые остатки?
...
Рейтинг: 0 / 0
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
    #39018922
Mironico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Короче убрал проставление change=1 Из ХП и вроде пока норм.
...
Рейтинг: 0 / 0
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
    #39018986
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovMironicoМне не продажи нужны (не чеки).
Мне нужны остатки из партий.
Ты не поверишь, но новые остатки получаются из сложения старых остатков с продажами.
Именно это и происходит все "2-3 секунды", пока длится эта пишущая чек транзакция. Но ТС говорит, что это "вроде норм", т.ч. ладно.
...
Рейтинг: 0 / 0
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
    #39019001
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockИменно это и происходит все "2-3 секунды", пока длится эта пишущая чек
транзакция.
Но происходит это на кассе, где текущие остатки, собственно, ни к чему. А вот если
перенести этот процесс в центральный сервер (где, возможно, даже железо мощнее), то
операция проведения чека, глядишь, будет выполняться гораздо быстрее. И конфликты
исчезнут. Но аффтар-то гордится придуманной им схемой и переделывать её не станет. Фтопку.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
    #39019070
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockТС говорит, что это "вроде норм"все пациенты врут.
Dimitry SibiryakovНо происходит это на кассе, где текущие остатки, собственно, ни к чему.Касса это очень жесткий реалтайм. Клиент над душой и он может тупо уйти. Раз товар дошел до кассы, значит он гарантированно есть (вот он в руках кассира!), сверяться с остатками(впрочем, если касса в этот момент в онлайне, можно и свериться, чтоб минимизировать пересорт, одно индексное чтение это не страшно) и тем более их двигать нет никакого смысла, т.е. апдейт уходит как класс вообще при пробитии чека.
Далее опционально можно подхватывать в фоне пробитые чеки, двигать остатки, отсылать(возможно предагрегированные) данные куда надо.
...
Рейтинг: 0 / 0
25 сообщений из 53, страница 1 из 3
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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