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

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

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

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


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

что не так?
...
Рейтинг: 0 / 0
01.06.2004, 11:32
    #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
01.06.2004, 15:06
    #32542969
MaxDmt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакции и Локи проблема с использованием
to Wireless
Я хочу сократить взаимные ожидания и не хочу deadlock :)
Если залочить таблицу - то ее уже невозможно отпустить до конца транзакции(если я правильно перевожу help).

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

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

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

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

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


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