powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Транзакции и Локи проблема с использованием
19 сообщений из 19, страница 1 из 1
Транзакции и Локи проблема с использованием
    #32540913
MaxDmt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Скажем 20 пользователей выписывают расходные накладные, причем иногда один и тот же товар с одного склада.
т.е. для отчетов таблица не блокируется, а для запросов с целью списания блокируется, чтобы не списать больше чем есть. Но проблема в том. что не круто блокировать всю таблицу, нужно только конкретные записи(остатки и обороты которые используются для вычисления остатков).
Так как все это делается параллельно, ( если я не ошибаюсь For update также делается параллельно) может возникнуть ситуация deadlock. 1 пользов- блокирует товар 1 и на очереди товар 2, а 2 пользов- уже заблокировал товар 2, 3,4 и на очереди товар 1. Можно конечно создать служебную табл, с одним индексным полем (товар+склад), и перед списанием проверять ее на наличие блокировок товар+склад. Ее для этой операции блокировать полностью, Но наверное также не круто, потомучто одна на всех, блокируется да еще и в режиме update/insert. А если пользователей больше?
Такую таблицу таблицу создать также проблема т.к. Lock снимается только после Commit.
Если на вопрос так просто не ответить бросьте в меня ссылкой где это описано.
...
Рейтинг: 0 / 0
Транзакции и Локи проблема с использованием
    #32540971
wbear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а по транзакции на товат никак нельзя?
...
Рейтинг: 0 / 0
Транзакции и Локи проблема с использованием
    #32540989
MaxDmt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В смысле "на товат" - или опечатка.
...
Рейтинг: 0 / 0
Транзакции и Локи проблема с использованием
    #32540990
wbear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
:) те наобород :) залочить все товары сразу одним селектом потом проверить все ли хватает. если нет досвидания. если все хватает начать обрабодку и потом комит
...
Рейтинг: 0 / 0
Транзакции и Локи проблема с использованием
    #32541009
MaxDmt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В том то все и дело что один и тотже товар может выписываться с разных складов. т.е. я получается буду ему мешать своим Lock. А вычисление остатков может происходить длительное время скажем 15 сек на всю накладную *20 пользов- все пьют кофе.
...
Рейтинг: 0 / 0
Транзакции и Локи проблема с использованием
    #32541042
wbear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
когда-то давно у меня что-то тоже было с локами я просто делал копию таблицы и с ней уже работал. ну естественно приходилось лочить таблицу перед копированием
...
Рейтинг: 0 / 0
Транзакции и Локи проблема с использованием
    #32541105
MaxDmt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я тоже посчти так делал, но там было немного пользователей, интересно как рекомендуют в принципе решать такие ситуации, и необязательно в PG.
...
Рейтинг: 0 / 0
Транзакции и Локи проблема с использованием
    #32541285
не въехал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а зачем лочить?
в конце транзакции по товару считай остаток, если отрицательный - откатывай.

нет?
...
Рейтинг: 0 / 0
Транзакции и Локи проблема с использованием
    #32541325
Wireless
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
deadlock не будет если будешь лочить товары в одном
заранее оговоренном порядке, например 1,2,3,4 или 4,3,2,1 .
...
Рейтинг: 0 / 0
Транзакции и Локи проблема с использованием
    #32541425
MaxDmt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to не въехал
Если у меня списание по FIFO и товара хватает на всех тогда спишет неправильно по партиям

to Wireless: Идея, правда также не идеальна т.к. если пользователей много и БД немаленькая нет гарантий что чейто update не окажется быстрей или медленнее на на разных фазах операции, равноценная скорость может быть только на незагруженном сервере.
...
Рейтинг: 0 / 0
Транзакции и Локи проблема с использованием
    #32541518
не въехал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторЕсли у меня списание по FIFO
тогда у тебя таблица не товаров, а партий. May be сделать транзакцию по партии (а не товару) и с тем же успехом откатывать (партию)?

то же можно и для блокировок (блокируешь по партиям, а не по товарам).


Но вообще-то отгрузку (списание массы в ценах реализации) надо бы отделить от списания товара (учетные цены, в т.ч. партионный расчет остатков/цен) (и его методов) - хотя бы если порядок ввода данных не совпадает с датировкой набиваемых документов (что иногда еще случается :-). Достигается это некой денормализацией (есть таблица остатков по товарам - с ней работает отгрузка, а есть - остатки по партиям - с ней - списание. (списание - приведение (посредством некой ХП) таблиц в соответствие на момент времени заданный учетчиком). Тогда отгрузка будет менее напрягать операторов бьющих документы. Списание - более централизованная операция, хоть и лочит "остатки по партиям" (пишет в них), но не лочит остатки по товарам (там она только читает) - т.е. не держит операторов. имхо.
...
Рейтинг: 0 / 0
Транзакции и Локи проблема с использованием
    #32541570
MaxDmt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
блокируешь по партиям, а не по товарам- не понял каким образом т.е. метод и
и какая таблица.
...
Рейтинг: 0 / 0
Транзакции и Локи проблема с использованием
    #32541582
не въехал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор Если у меня списание по FIFO
автортогда у тебя таблица не товаров, а партий.

что не так?
...
Рейтинг: 0 / 0
Транзакции и Локи проблема с использованием
    #32542360
Wireless
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Wireless: Идея, правда также не идеальна т.к. если пользователей много и БД немаленькая нет гарантий что чейто update не окажется быстрей или медленнее на на разных фазах операции, равноценная скорость может быть только на незагруженном сервере.

Мы говорим именно про deadlock или ты просто хочешь сократить взаимные ожидания?
Если речь идет о deadlock, то о чем я говорил - гарантия того что их не будет:

Когда все транзакции будут лочить таблицы в одном порядке, то этого не произойдет.
Можешь даже функцию какую-нибудь написать:
Код: plaintext
1.
2.
3.
4.
5.
funny_lock ()
{
      lock account in exclusive mode;
      lock merchant;
      lock realize;
}

:)
...
Рейтинг: 0 / 0
Транзакции и Локи проблема с использованием
    #32542969
MaxDmt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to Wireless
Я хочу сократить взаимные ожидания и не хочу deadlock :)
Если залочить таблицу - то ее уже невозможно отпустить до конца транзакции(если я правильно перевожу help).

deadlock не будет если будешь лочить товары в одном
заранее оговоренном порядке, например 1,2,3,4 или 4,3,2,1 .
Здесь убедил!
...
Рейтинг: 0 / 0
Транзакции и Локи проблема с использованием
    #32543763
CM Hungry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я такие записи блокирую на уровне бизнес-логики. Т.е. пока стоит id пользователя в поле locked (таблица, как ты понимаешь, может быть любая), ничего с этой записью, кроме селекта, сделать нельзя.

У меня все это на вебе, и один и тот же контракт с поставками могут редактировать несколько человек. Так же могут быть остатки по "заявкам на контракт".
...
Рейтинг: 0 / 0
Транзакции и Локи проблема с использованием
    #32544191
MaxDmt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to CM Hungry
Хотелось бы подробнее, т.к. у меня поверхностные знания PostgreSQL.

Т.е. пока стоит id пользователя в поле locked

Что значит id пользователя и поле locked?
...
Рейтинг: 0 / 0
Транзакции и Локи проблема с использованием
    #32544897
Wireless
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Т.е. пока стоит id пользователя в поле locked
ситуация. пользователь зашел, к примеру, в режим
редактирования товара, твоя бизнес-логика добавила
ид юзера в таблицу, описывающую все локи и ....
пользователь закрыл браузер. Кто когда и как снимет такой лок?

Я рекомендую
пользоваться все-таки средствами БД, но разрабатывать
ПО таким образом, чтобы локи возникали только на момент
изменяющих транзакций, а не на момент пока юзер
редактирует у себя чего-то там, что здесь предлагается
сделать.
...
Рейтинг: 0 / 0
Транзакции и Локи проблема с использованием
    #32545172
CM Hungry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 wireless:
лок снимает скрипт по таймауту
кроме того, есть возможность определить, работает конкретный пользователь сейчас или нет
далее - по закрытию браузера можно выполнить скрипт (onunload), благо интранет
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Транзакции и Локи проблема с использованием
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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