29.04.2011, 19:12 | #1 |
Участник
|
fed: Parallel BOM calculation in RollUp 7
Источник: http://fedotenko.info/?p=193
============== Since Microsoft released most recent update of Dynamics AX (I mean SP1 rollup 7), I would like to point the readers of my blog to very important update in this version, which can dramatically increase performance of one of the critical, but slow operations from production module of Axapta. I am talking about BOM Calculation process, which in previous version can only be started in single-thread mode. I heard about implementations, where BOM recalculation for all BOMs in the system were taking more then 2 days. Somewhere in the last December, Microsoft released hotfix KB2487033, which supported multi-threaded execution of BOM calculation and now this feature included into RollUp7. This nice feature works only if BOM Calculation is started not for a given ItemId, but for all BOMs in the system (say – from costing version form) and if user specified batch-mode calculation of this batch job. In this case, the system behaves the following way:
Источник: http://fedotenko.info/?p=193
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору. |
|
01.05.2011, 21:05 | #2 |
Участник
|
Цитата:
dramatically increase performance of one of the critical, but slow operations from production module of Axapta
__________________
Thx, Ievgenii Korovin| Dynamics Ax SCM| Microsoft Corp| http://blogs.msdn.com/DynamicsAxSCM/ |
|
|
За это сообщение автора поблагодарили: Logger (3). |
01.05.2011, 21:33 | #3 |
Moderator
|
Вам спасибо! На одном из моих проектов (правда я там только приглашенный консультант), данная фича разрешила тяжелую политическую ситуацию по поводу производительности системы.
|
|
|
За это сообщение автора поблагодарили: Logger (3), Poleax (2), gl00mie (3). |
02.05.2011, 15:06 | #4 |
Участник
|
Цитата:
Вы случаем не планируете распараллелить разноску накладных и журналов ? Или хотя бы убрать квадратичные зависимости от числа строк при расчете налогов ? |
|
02.05.2011, 16:27 | #5 |
Moderator
|
Задача разноски журналов (не складских) в целом уже решена (правда не самым симпатичным образом). Если у тебя большие журналы, проставляешь поле Lines Limit в шапке журнала в, скажем, 500 строк. Потом запускаешь В ПАКЕТНОМ РЕЖИМЕ разноску выбранных журналов из Главная книга->Периодические операции->Разнести журналы (у меня нету русской версии под рукой, могу ошибаться в названии пункта меню). Система аккуратно разрезает твои журналы на несколько штук, по 500 строк в каждой, а потом их всех в параллельном режиме разносит.
Не очень удобно, конечно, с точки зрения возможности дальнейшей работы с разнесенными журналами, но жить можно. С накладными тоже достаточно похоже: Если ты запускаешь разноску МНОЖЕСТВА накладных по многим заказам/закупкам (через Summary Update) в пакетном режиме, то каждая накладная будет создаваться в отдельном пакетном задании. Правда, если у тебя всего одна накладная, но большая - то тебе это никак не поможет. Но с другой стороны - накладные по 2000 строк каждый день и не разносятся |
|
02.05.2011, 17:38 | #6 |
Участник
|
Да, я имел в виду случай когда одна накладная с числом строк 500 и более тысячи.
|
|
02.05.2011, 17:53 | #7 |
Moderator
|
Цитата:
Можно конечно запускать задачи разноски строк ДО всего остального и все остальное запускать только если строки успешно разнеслись, но тогда у тебя в системе какое-то время будет накладная со строками, но без шапки P.S. Ну и конечно начинать транзакцию в одной задаче,а заканчивать в другой - нельзя по определению. Последний раз редактировалось fed; 02.05.2011 в 17:55. |
|
02.05.2011, 18:53 | #8 |
Участник
|
Эти проблемы понятны.
Но они решаемы. Сделали же закрытие склада с нескольких клиентов. Тут все аналогично. |
|
02.05.2011, 19:07 | #9 |
Moderator
|
Цитата:
Я думаю, если они в новой версии сделали исполнение кода на clr-runtime, есть шансы что там задача решается с помощью нескольких нитей в рамках одной транзакции. Однако почитав про те грабли, которые порождает использование clr-runtime, я как-то засомневался, нужно ли мне ускорение разноски за такую цену... |
|
02.05.2011, 20:41 | #10 |
Участник
|
Ну если не распараллеливание, то какие другие способы ускорения разноски больших журналов и накладных вы видите ?
Выше вы предполагали что это не нужно или нужно редко. Т.е. ничего не предложили. А если нужно и достаточно часто, то что можно предложить ? Как вариант, можно вместо одной накладной на 1000 строк обработать 25 по 40 строк и объединить в один документ при печати. (Хотя это просто другой способ распараллеливания) Другие варианты пока в голову не приходят. |
|
03.05.2011, 01:06 | #11 |
Участник
|
Цитата:
Вы случаем не планируете распараллелить разноску накладных и журналов ? Или хотя бы убрать квадратичные зависимости от числа строк при расчете налогов ?
Цитата:
Ну если не распараллеливание, то какие другие способы ускорения разноски больших журналов и накладных вы видите ?
.
__________________
Thx, Ievgenii Korovin| Dynamics Ax SCM| Microsoft Corp| http://blogs.msdn.com/DynamicsAxSCM/ Последний раз редактировалось Ievgenii; 03.05.2011 в 01:11. |
|
03.05.2011, 04:28 | #12 |
Участник
|
Цитата:
Сообщение от Ievgenii
Посмотрите на Dynamics Ax 2012. Там постинг sales\purchase ордеров вроде так и реализован. Про складские журналы - такая задача была и есть но руки до нее пока не дошли либо надо менять весь Journal Framework а это не недельная задача
IL - насколько я знаю в Dynamics Ax 2012 постинг тех же purchase orders на 40% быстрее чем в Ax2009 только благодаря выполнению кода в IL . |
|
03.05.2011, 09:58 | #13 |
Moderator
|
Цитата:
1. При разноске накладной по закупке, вместо обновления складских проводок и разноски на складские счета, делается проводка ГК на некий субсчет 15ого счета 2. После разноски накладной, порождается пакетное задание на параллельное обновление складских проводок с разноской в ГК. Код разноски правиться так, чтобы в качестве коррсчета прихода использовался субсчет 15ого счета. 3. Если пакетное задание некорректно завершилось, посылается alert кому надо 4. Надо бы еще подумать на тему усиленной проверки строк накладных в момент 1ого пункта, чтобы снизить вероятность когда накладную мы разнесли, а потом выяснилось что на склад не может оприходовать, потому что, скажем, финансовая аналитика не указана. (которая только на 10ке нужна, а на 15ом - нет). Для заказов можно аналогичную схему использовать,но только если комплектация используется и к моменту разноски накладных и отборочных, товар уже собран и точно физически присутствует в системе. Просто в случае списания, некоторое отставание в состянии inventSum само по себе критично, а уж если сначала накладную распечатали и отдали, а потом выяснили что такого товара нету - так вообще кранты... |
|
03.05.2011, 10:40 | #14 |
Участник
|
Большие заказы характерны, например, в ритейле, когда нужно сделать разноску реализации магазина за день. В плане оптимизации разноски можно многое поправить, в т.ч. в коде отключить все неиспользуемые функции. В т.ч. можно рассмотреть вариант SQL-й разноски - есть прецеденты Но все это - тюнинг под конкретный проект, в глобальное решение такое не включат и всегда будет запас под точечную оптимизацию.
__________________
Ivanhoe as is.. |
|
03.05.2011, 11:21 | #15 |
Участник
|
Ну почему не включат ?
Делают же оптимизации тяжелых операций. Закрытие склада, спецификации, блокировки по InventSum и.т.п. Да мало ли где нужна разноска таких заказов. ЕРП система за кучу денег должна это делать без проблем. Последний раз редактировалось Logger; 03.05.2011 в 11:26. |
|
03.05.2011, 11:24 | #16 |
Участник
|
|
|
03.05.2011, 11:38 | #17 |
Moderator
|
Цитата:
Даже как-то интересно стало |
|
03.05.2011, 11:52 | #18 |
Участник
|
Проблемы у нас как правило на закупках лезли. Профилироваться пробовал.
Основное время уходит на расчет налогов. С ростом числа строк в накладной время расчета нелинейно растет. Т.е. если накладная из 100 строк обрабатывается 30 секунд, то накладная из 1000 строк будет обрабатываться не 300 или менее секунд (как можно было бы ожидать из-за снижения удельного веса накладных расходов) а непропорционально дольше. Блокировки ни при чем, так как проверку делали в отдельной тестовой компании, в рабочей базе. Тест проводили на 3-ке SP5. В 2009-й судя по поведению ничего не изменилось. Детально это все пофиксить пока руки не дойдут. Пока придумали заглушку - в виде разбиения на кучу накладных по 40 строк. Нормально работает. Т.е. получается что быстрее обрабатывается 25 накладных по 40 строк чем одна большая на 1000. В этом мне видится основная проблема. Так как число строк в документе - это случайная величина с матожиданием в районе 50-100 строк. Большинство документов проходит нормально, но несколько раз в день (а к сожалению не только в день, но и в ночь, так как работаем 24/7) случаются всплески, когда попадаются большие документы и на них все подвисает. |
|
03.05.2011, 12:01 | #19 |
Участник
|
Ну вот я и подумал, что чем лечить нелинейные зависимости времени обработки в коде, рискуя накосячить в налогах и вообще все нахрен поломав, то не проще ли применить общий подход по параллельной обработке. Т.е. если бы эти 25 накладных в моем случае обрабатывались бы параллельно, а потом в конце агрегировались в один документ (если номер накладной и ваучер одинаковые, то это получалось бы почти автоматически) то мы бы получили многократное увеличение скорости обработки документов (в 40 раз для документа из 1000 строк, конечно при условии что есть достаточно вычислительных мощностей на аосе).
Самое главное в таком подходе - что он легко масштабируется с ростом числа строчек ! И у нас не простаивают процессорные ядра на серверах. А перевести на выполнению кода в IL - это конечно ускорение, но принципиально дела не меняет, так как характер зависимости времени обработки от числа строк остается тем же самым (предположительно квадратичным) Так что если число строк в документе вырастет не до 1000 а, например, до 5000 - то мы получим те же самые проблемы даже с выполнением кода в IL Последний раз редактировалось Logger; 03.05.2011 в 12:09. |
|
03.05.2011, 12:26 | #20 |
Участник
|
О!
По поводу налогов было уже обсуждение нелинейной зависимости времени расчета от числа строк в документе: Оптимизация класса Tax |
|
Теги |
il, ru7, tax, налоги, пакетная обработка, производительность, разноска накладной, ax2012 |
|
|