|
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
|
|||
---|---|---|---|
#18+
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. Заранее спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2015, 12:15 |
|
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
|
|||
---|---|---|---|
#18+
MironicoИ тут я на "сервер" где база добавляю прогу для передачи в центральный офис изменений.возьми нормальный репликатор, неблокирующий и будет тебе счастье. Их более одного, стоят недорого. Апдейтить исходные данные ради репликации, как по мне, так идеологически совсем неправильно. А если надо отрепдлицировать разом в пяток других баз будешь пять раз апдейтить? оно ж совсем сдохнет на дэдлоках. Вот протоколирующий триггер куда приятней. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2015, 12:26 |
|
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
|
|||
---|---|---|---|
#18+
Тут все очень сложно и просто в одночасье. Репликаторы не подходят. Долго обьяснять. Тут как-бы нужно добиться чтобы на хп ошибка не вылетала и она имела приоритет. Пусть уже "репликатор" сбоит себе и перезапускает таймер, отправит в след. раз. Вот как такого добиться не понимэ. Игрался разными вариантами настроек но уже запарился подбирать. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2015, 12:37 |
|
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
|
|||
---|---|---|---|
#18+
MironicoРепликаторы не подходят.Все пациенты врут. Mironicoчтобы на хп ошибка не вылеталаапдейты зло, нет апдейта, нет и дэдлока. MironicoДолго обьяснять.А ты попробуй сформулировать мысль письменно, пока пишешь, глядишь и решение придумаешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2015, 12:58 |
|
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
|
|||
---|---|---|---|
#18+
Mironico, схема полная хрень. Ну конечно кое-что можно сделать, но поле change тут точно не в кассу. Когда остаток пересчитывается дёргай генератор и пиши новый номер. А вторая прога пусть у себя учитывает закачивала ли она остаток с таким номером или нет, а первую базу вообще не трогает. Хотя я бы не сказал что это прямо, но по крайней мере конфиликтов поможет избежать. Нормальный репликатор конечно лучше. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2015, 12:59 |
|
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
|
|||
---|---|---|---|
#18+
Симонов ДенисХотя я бы не сказал что это прямокривулек можно много напридумывать, только нужно ли? Тут самый простой вариант пристыкованная 1-1 табличка, которую апдейтит "чудо репликатор" и будет тоже самое, криво, но дэдлоков не будет. Тут надо проектировать систему с прицелом на работу в паре с нормальным репликатором. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2015, 13:05 |
|
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
|
|||
---|---|---|---|
#18+
Mironico, Есть еще вариант, который сразу напрашивается. В процедуре, которая сохраняет чек, не должно быть update и delete . Это вообще закон основной. Конституция. Иначе репликация (такая кривая) - не единственное, из-за чего будут теряться чеки. В данный момент, думаю, чем всё переделать и изменить репликацию, проще убрать из транзакции, сохраняющей чек, все update и delete. Если хочешь что-то такое сделать после чека не критичное - открывай другую транзакцию. Если это что-то - критичное - придумывай какую-то логику, чтобы попытаться повторно выполнить это после дэдлока (например запись в буффер того, что необходимо сделать, вместе с сохранением чека, коммит чека и этого буффера, а затем попытки в другой транзакции, пока не получится). ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2015, 18:11 |
|
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
|
|||
---|---|---|---|
#18+
MironicoКонфликты возникают между ХП в первой программе и командой которая изменяет с 1 в 0 признак изменения. Врёшь. Или у вас существуют чеки, которые закрываются дважды. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2015, 18:24 |
|
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovMironicoКонфликты возникают между ХП в первой программе и командой которая изменяет с 1 в 0 признак изменения. Врёшь. Или у вас существуют чеки, которые закрываются дважды. Да нет, там скорей всего в этой же процедуре обновляются остатки, или что-то типа того. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2015, 23:49 |
|
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, да я так понимаю у него тупо остатки по товару считаются, когда чеки закрываются. Как только остаток пересчитался ставится признак пересчитан. Как только репликатор забрал изменённый остаток - признак сбрасывается. Короче полная кривизна. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2015, 00:19 |
|
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
|
|||
---|---|---|---|
#18+
Да причем тут остатки. Есть 2 таблицы. "Товары" и "партии". Конечно ХП при пробитии чека снимает остатки. т.е. изменят таблицу "партии". В Таблицу "товары" ставит при этом на нужном товаре 1. Друагя программа в Таблицу "товары" ставит на нужном товаре 0. Если Транзакция ХП 2-3 секунды максимум то транзакция репликатора вообще короткая. ВОПРОС в том что при изменении таблицы "партии" несколькими кассами никаких конфликтов обновлений и близко нет. Почему такая фигня с товарами? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2015, 15:24 |
|
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
|
|||
---|---|---|---|
#18+
MironicoЕсть 2 таблицы. "Товары" и "партии". Конечно ХП при пробитии чека снимает остатки. т.е. изменят таблицу "партии". В Таблицу "товары" ставит при этом на нужном товаре 1. Друагя программа в Таблицу "товары" ставит на нужном товаре 0. Если Транзакция ХП 2-3 секунды максимум то транзакция репликатора вообще короткая. какая бы транзакция короткая не была она всё равно имеет вероятность конфликта с другой. Тебе же уже сказали схема кривая. MironicoВОПРОС в том что при изменении таблицы "партии" несколькими кассами никаких конфликтов обновлений и близко нет. Почему такая фигня с товарами? да откуда нам знать что у тебя там с партиями. Может ты на разных кассах разные партии расходуешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2015, 15:30 |
|
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
|
|||
---|---|---|---|
#18+
MironicoХП при пробитии чека снимает остатки. т.е. изменят таблицу "партии". В Таблицу "товары" ставит при этом на нужном товаре 1. Зачем она ставит 1 в таблице товаров, если не изменяет её?.. Конечно, ты нарвёшься на конфликт когда кто-то пробивает чек на товар, который сейчас реплицируется. Поэтому не надо реплицировать товары, достаточно реплицировать чеки. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2015, 15:45 |
|
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
|
|||
---|---|---|---|
#18+
Mironicoизменении таблицы "партии" несколькими кассами никаких конфликтов обновлений и близко нет.Это тебе кажется. запусти пару-тройку сотен касс и "попрет". Симонов Дениссхема кривая.видимо это надо повторить еще десяток раз. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2015, 15:53 |
|
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
|
|||
---|---|---|---|
#18+
На кой мне реплицировать чеки? Мне в офисе нужны остатки по 65 точкам максимально актуальные. Будь везде хороший инет я бы раз в час гонял все остатки и не парился бы. А так приходится раз в 10 мин. обновлять только измененные. Поскольку у меня никогда никаких дедлоков не было решил что проще всего в товарах добавить признак изменения в остатка в партиях. Пробивается чек - меняется остаток в партиях - ставится 1 в товарах. по таймауту запускается репликатор - выбирает из товаров позиции с 1 - отправляет изменения на сервер - ставит 0. И вот нарвался. Сейчас думаю как переделать. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2015, 16:00 |
|
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
|
|||
---|---|---|---|
#18+
MironicoСейчас думаю как переделать.Триггер! ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2015, 16:03 |
|
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
|
|||
---|---|---|---|
#18+
Для чего триггер ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2015, 16:04 |
|
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
|
|||
---|---|---|---|
#18+
MironicoБудь везде хороший инет я бы раз в час гонял все остатки и не парился бы. Угадай с трёх раз почему off-line репликация была изобретена. MironicoПробивается чек - меняется остаток в партиях - ставится 1 в товарах. по таймауту запускается репликатор - выбирает из товаров позиции с 1 - отправляет изменения на сервер - ставит 0. Достаточно вторую часть заменить на "по таймауту запускается репликатор - выбирает новые чеки, суммирует их - отправляет изменения на сервер - сбрасывает признак новизны". Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2015, 16:14 |
|
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
|
|||
---|---|---|---|
#18+
Мне не продажи нужны (не чеки). Мне нужны остатки из партий. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2015, 16:42 |
|
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
|
|||
---|---|---|---|
#18+
MironicoМне не продажи нужны (не чеки). Мне нужны остатки из партий. Ты не поверишь, но новые остатки получаются из сложения старых остатков с продажами. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2015, 16:55 |
|
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
|
|||
---|---|---|---|
#18+
А зачем этот мартышкин труд для компа если есть готовые остатки? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2015, 17:06 |
|
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
|
|||
---|---|---|---|
#18+
Короче убрал проставление change=1 Из ХП и вроде пока норм. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2015, 17:19 |
|
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovMironicoМне не продажи нужны (не чеки). Мне нужны остатки из партий. Ты не поверишь, но новые остатки получаются из сложения старых остатков с продажами. Именно это и происходит все "2-3 секунды", пока длится эта пишущая чек транзакция. Но ТС говорит, что это "вроде норм", т.ч. ладно. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2015, 18:18 |
|
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
|
|||
---|---|---|---|
#18+
YuRockИменно это и происходит все "2-3 секунды", пока длится эта пишущая чек транзакция. Но происходит это на кассе, где текущие остатки, собственно, ни к чему. А вот если перенести этот процесс в центральный сервер (где, возможно, даже железо мощнее), то операция проведения чека, глядишь, будет выполняться гораздо быстрее. И конфликты исчезнут. Но аффтар-то гордится придуманной им схемой и переделывать её не станет. Фтопку. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2015, 18:34 |
|
Deadlock. Update contlicts with сопсurеnt update. Помогите решить.
|
|||
---|---|---|---|
#18+
YuRockТС говорит, что это "вроде норм"все пациенты врут. Dimitry SibiryakovНо происходит это на кассе, где текущие остатки, собственно, ни к чему.Касса это очень жесткий реалтайм. Клиент над душой и он может тупо уйти. Раз товар дошел до кассы, значит он гарантированно есть (вот он в руках кассира!), сверяться с остатками(впрочем, если касса в этот момент в онлайне, можно и свериться, чтоб минимизировать пересорт, одно индексное чтение это не страшно) и тем более их двигать нет никакого смысла, т.е. апдейт уходит как класс вообще при пробитии чека. Далее опционально можно подхватывать в фоне пробитые чеки, двигать остатки, отсылать(возможно предагрегированные) данные куда надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2015, 20:30 |
|
|
start [/forum/topic.php?fid=40&tid=1562691]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 160ms |
0 / 0 |