Показать сообщение отдельно
Старый 17.08.2005, 10:46   #5  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,913 / 5736 (197) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Это поле добавлено в версии 3.0 для уменьшения взаимных блокировок.

Грубо говоря - идея следующая:
В старой Axapta (2.5/2.1) обороты по счетам и аналитикам накапливались в таблицах ledgerBalances и ledgerBalancesDim в разрезе счетов и периодов и в разрезе счетов, периодов и аналитик соответственно. Классы разноски в ledgerTrans после записи в саму ledgerTrans обновляли обороты в этих таблицах. Соответственно - если я начинал разносить журнал из 5000 строк, система обновляла одну из строк в ledgerBalances (скажем - по счету 60.01) и эта строка блокировалась до конца транзакции. При этом все остальные транзакции, которые пытались выполнить проводку на счет 60.01, ожидали ее окончания. Ну а поскольку разноска журнала из 5000 строк может занимать эдак часик, а то и два, все это приводило к высокому уровню блокировок, и большому количеству перекуров среди пользователей.

В версии 3.0 эти таблицы заменили на таблицы ledgerBalancesTrans и ledgerBalancesDimTrans. При этом - обороты по счету могут записываться в любую из 20 строк которые этому счету соответствуют. То есть - при обновлении ledgerTrans система более или менее случаным (в зависимости от номера сессии) образом выбирает одну из этих строк и пишет туда сумму оборотов. Благодаря этому - вероятность взаимных блокировок уменьшается в 20 раз. В то же время - если классам LedgerBalanceDim* или подобным необходимо посчитать обороты за период, то в общем-то, не возникает большой разницы между чтением одной строки из таблицы и чтением 20 строк из той же таблицы (Серверное железо-то теперь очень даже мощное). Так что тут проблем с производительностью не возникает.
За это сообщение автора поблагодарили: mazzy (5), konopello (1), alex55 (1).