Цитата:
Для меня самый простой выход - оптимизировать сам механизм пересчета, например пересчитывать только проводки в открытых периодах, или вручную задавать интервал дат при пересчете, т.е каким либо образом уменьшить порцию вычислений в одной транзакции.
Уменьшить объём данных для пересчёта с помощью, например, задания диапазона дат - самый простой вариант. Просто делаете свой наследник класса LedgerRecalcPeriod и в нём правите одну строчку в методе run(). Так же отличная идея с открытыми периодами.
Мне ещё кажется неоптимальным механизм пересчёта, т.е. само вычисление значений внутри транзакции. Я бы предложил его переписать целиком - сначала подсчитывать суммарные значения, потом их класть в RecordInsertList и только потом уже открывать транзакцию, внутри которой чистить таблицы сумм и вставлять в них значения из RecordInsertList'ов.