Показать сообщение отдельно
Старый 29.03.2017, 11:05   #2  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Есть вариант не переписывать отмену закрытия, оставить все почти как есть, но паковать отдельные пакетные задачи InventCostClosingCancel_WorkInvent в "пакеты", которые бы обрабатывались последовательно в рамках одного потока на пакетном сервере.
Где-то была публикация на тему того, как команда разработчиков, отвечающая за финансовый блок, перед выпуском AX 2009 задалась целью разнести 100 тысяч журналов ГК за приемлемое время. В ходе тестирования обнаружилось, что создавать отдельную пакетную задачу на разноску каждого журнала слишком неэффективно: на таком количестве задач пакетная инфраструктура начинает сама отжирать слишком много ресурсов, плюс многочисленные простои между запусками отдельных задач снижают общую производительность. В итоге придумали механизм "пакетирования":
  • выбирается критерий для определения размера "пакета" (для разноски журналов это может быть суммарное количество строк, для отмены закрытия склада - количество номенклатур);
  • при создании заданий обработки данных они нарезаются на "пакеты" примерно равного размера;
  • очередная пакетная задача создается на "пакет" в целом, а не на каждое отдельное задание обработки в нем, при этом для выполнения "пакета" используется небольшой класс-обертка;
  • при запуске с помощью пакетной инфраструктуры класс-обертка последовательно запускает задания обработки из своего "пакета".
Это позволяет, с одной стороны, снизить нагрузку на пакетную инфраструктуру, с другой, сократить время простоя между запусками отдельных заданий обработки, а с третьей, при желании - управлять количеством потоков пакетного сервера, которые будут задействованы, за счет изменения размера "пакетов". В приложении это все представлено классами BatchTaskBundle, BatchTaskBundleAssembler и их наследниками.

PS. На счет того, почему отмена закрытия реализована не так эффективно, как само закрытие склада: вероятно, руки не дошли, либо сценарий отмены был не самым приоритетным. В конце концов, на пресейлах можно козырять скоростью закрытия склада, но как-то странно выпячивать скорость отмены закрытия
За это сообщение автора поблагодарили: Logger (3).