Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Deadlock. Update contlicts with сопсurеnt update. Помогите решить. / 25 сообщений из 53, страница 1 из 3
23.07.2015, 12:15
    #39014336
Mironico
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
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
23.07.2015, 12:26
    #39014352
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
MironicoИ тут я на "сервер" где база добавляю прогу для передачи в центральный офис изменений.возьми нормальный репликатор, неблокирующий и будет тебе счастье.
Их более одного, стоят недорого.

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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


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

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

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

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

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

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


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