AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.03.2017, 20:51   #1  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
? Отмена закрытия склада
Привет всем.
Хочу обсудить отмену закрытия склада (версия ax 2009 RU5, но думаю, что актуально и для 2012 - 7.0)

Отмена закрытия склада в пакете имеет неприятную особенность - при отмене генерируется очень много дополнительных пакетных задач (InventCostClosingCancel_WorkInvent) по одной на каждую отменяемую номенклатуру.
В нашем случае получается от 10 до 35 тысяч пакетных заданий. Естественно они занимают все доступные потоки на пакетном сервере и все остальные пакеты вынуждены ждать пока пройдет отмена, что нарушает график работы других пакетов. Также из-за того что пакетный сервер запускает пакетные задания не мгновенно (а где то раз в 30-60 секунд просматривает перечень пакетов) - то получается, что неэффективно время используется - много времени может тратиться вхолостую.

Я подумал, почему бы (вариант а) по аналогии с закрытием склада не генерировать только InventParameters.CloseBatchHelpers дополнительных пакетных заданий (помощников), прописав в каждом свой набор отменяемых номенклатур (а не одну как сейчас в InventCostClosingCancel_WorkInvent).

Или опять же по аналогии с с закрытием склада (вариант б) записать перечень отменяемых номенклатур в табличку (InventCostList), заставив пакетных помощников читать данные из этой таблички и отменять по ним сопоставления в InventSettlement.

Любой из этих вариантов будет работать быстрее, чем стандартный. Не будет забивать доступные потоки в пакетном сервере, соответственно, не будет мешать другим пакетам. Вариант Б пожалуй даже получше будет - более эффективно задействует мощность сервера, так как в любой момент времени будут задействованы все запланированные задания помощники.


Вопрос такой :
1. Есть ли у описанных подходов недостатки по сравнению со стандартом?
2. Почему в стандарте так не сделали? Ведь варианты а)-б) сами напрашивались по аналогии с закрытием склада.

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

PS. На счет того, почему отмена закрытия реализована не так эффективно, как само закрытие склада: вероятно, руки не дошли, либо сценарий отмены был не самым приоритетным. В конце концов, на пресейлах можно козырять скоростью закрытия склада, но как-то странно выпячивать скорость отмены закрытия
За это сообщение автора поблагодарили: Logger (3).
Старый 29.03.2017, 12:21   #3  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Спасибо за отзыв.
В принципе, я примерно это и имел в виду под вариантом А (наверно описал криво).
Т.е. если раньше InventCostClosingCancel_WorkInvent обрабатывал только одну номенклатуру, то теперь сделать чтобы мог перечень позиций обрабатывать, а набор позиций как раз при постановке пакетного задания определять в соответствие с желаемым количеством параллельно работающих помощников (InventCostClosingCancel_WorkInvent).

В общем, мысль пошла в том же направлении.
Старый 19.05.2023, 23:39   #4  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Вот и меня настигла задача оптимизации отмены пересчетов себестоимости. Правда, в моем случае, основная нагрузка оказалась вызвана не столько количеством номенклатур, сколько количеством производственных заказов (есть много спецификаций - BOM-ов - и много связанного производства). В одном из кейсов отмена пересчета себестоимости для ~300 номенклатур в рабочем окружении привела к генерации мега-пакетного задания на 124+ тысячи пакетных задач, бОльшая часть из которых была связана с пакетными заданиями InventCostClosingCancel_WorkProd. Под тяжестью такой нагрузки производительность пакетной инфраструктуры коллапсировала, и 30+ пакетных серверов смогли запускать вместо обычных нескольких сотен лишь ~15 пакетных задач одновременно. В моем случае решил проблему с помощью этого инструмента, пакуя все генерируемые пакетные задания в ограниченное число потоков. Это не так идеально, как InventCostList + top picking, но всё лучше, чем коллапс пакетной инфры и вот это всё из-за отмены одного пересчета себестоимости.

Последний раз редактировалось gl00mie; 19.05.2023 в 23:49.
За это сообщение автора поблагодарили: Logger (5).
Теги
inventory closing, inventsettlement, закрытие склада, пакетное задание

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Отмена закрытия склада. Оптимизация. vallys DAX: Программирование 20 23.08.2012 11:14
Denis Fedotenko: Себестоимость и закрытие склада Blog bot DAX: База знаний и проекты 44 29.03.2010 14:54
Отмена закрытия склада, или есть варианты ? CasperSKY DAX: Администрирование 2 12.11.2008 01:11
Отмена закрытия склада. AlexeyBP DAX: Функционал 2 16.01.2008 07:47
Отмена закрытия склада Penguin DAX: Функционал 4 18.05.2005 15:08
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 04:30.