09.09.2019, 10:14 | #1 |
Участник
|
AX 2012 R3. Ускорение sp_WHSOnHand и sp_WHSOnHandWithDelta
Существенное ускорение процедур получения остатков в штатных WHS процедурах в базе MSSQL. Штатные крутили цикл и могли выполнять до 11 вызовов (на моих аналитиках) select на один остаток.
На старых процедурах на моих данных видел клинические случаи получения остатков 1 час 45 минут на один вызов. Новые менее 1 секунды. При большом объеме InventDim и WHSInventReserve это действительно проблема. Конечно, у каждого в базе складские аналитики могут немного отличаться, но при этом меняется только число параметров в процедуре и условия в выражении WHERE. При полной синхронизации базы хранимые процедуры естественно слетят. Нужно править код X++. У себя не запускаю давно. sp_WHSOnHand.txt sp_WHSOnHandWithDelta.txt |
|
|
За это сообщение автора поблагодарили: KiselevSA (5), Vadik (1), trud (5), raz (5), sukhanchik (5), Logger (5), gl00mie (5), SRF (5), AnGor (2), imir (2). |
09.09.2019, 21:43 | #2 |
Участник
|
Спросили про сбои. Сбоев не было. Процедуры вызываются при запросе по "дырявым аналитикам" когда между соседними аналитиками по иерархии резервирования есть пропуски.
У меня в продакшене уже недели 3 крутиться. Никто разницы не заметил (кроме веб-сервисов) которые штатно проседали до 6-8 секунд на один запрос остатков (склад + ячейка), а теперь все это в прошлом. Работает мгновенно. По началу весь механизм остатков в исполнении WHS сплошная боль и печаль. Но если разобраться с хранением данных по уровням в WHSInventReserve + с этими процедурами, то местами даже лучше модели InventSum + InventDim. |
|
10.09.2019, 02:36 | #3 |
Участник
|
Спасибо что поделились, но хотелось бы подробностей
Делаете ли вы очистку складских остатков? т.е. вот это время 6-8 секунд - это время после очистки остатков или она не используется? https://cloudblogs.microsoft.com/dyn...eserve-tables/ Цитата:
Large number of records in WHSINVENTRESERVE that have all Qty fields = 0 – A new clean up job called “Warehouse management on-hand entries cleanup” has been added under the Inventory management module under Periodic > Clean up. The clean-up job will delete the records in the InventSum and WHSInventReserve table for closed on-hand entries. The impact of running this clean up on a regular basis is significant performance improvements of On-hand related inquiries.*
Цитата:
KB 3112873 This fix optimizes the sp_WHSOnHand stored procedure to use better query plans and make sure it is only called when absolutely necessary.
|
|
10.09.2019, 06:55 | #4 |
Участник
|
Чисткой WHSInventReserve занимался, но занятие неблагодарное. Что-то в районе 22 млн -> 20 млн превратилось. И работало дня 2. Сейчас 38 млн. (InventDim 97 млн)
У меня установлен CU11 (29 Jun 2016), так что все фиксы микрософт на тот момент уже вышли. Смотрел на реализацию в CU13 она не изменилась. Там проблема в реализации самой процедуры. Не может цикл с селектами работать быстро, а у меня веб-сервисы по получению остатков. И ответ должен быть быстрым. |
|
10.09.2019, 08:41 | #5 |
Участник
|
20 млн ненулевых записей?
это конечно очень много, на типичном складе если я правильно понимаю это будет число порядка числа ячеек(т.е. несколько десятков тысяч). В целом неудивительно что стандарт перестал работать Последний раз редактировалось trud; 10.09.2019 в 08:46. |
|
11.09.2019, 08:21 | #6 |
Участник
|
На производстве это нормально. В зависимости от того, как быстро идет производство, в день может генерироваться около тысячи серийников. У нас в АХ 4.0 в какой-то момент начались сбои стандартного функционала, и стал дублироваться InventDimId. Проблему пофиксили и сейчас у нас 50 млн записей в InventDim.
__________________
// no comments |
|
11.09.2019, 10:08 | #7 |
Участник
|
|
|
11.09.2019, 14:12 | #8 |
Модератор
|
сильно зависит от сетапа - у нас к примеру есть клиент у которого стабильное распределение данных это 90-95% склада "закрыто" физически но все еще "открыто" финансово (остатки чистятся и пересчитываются регулярно)
__________________
-ТСЯ или -ТЬСЯ ? |
|
11.09.2019, 17:02 | #9 |
Участник
|
А этот фикс не пробовали ставить-запускать? Похоже на ваше описание
Цитата:
The On-hand entries aggregation by financial dimensions is introduced with KB 3007375 around December 2014. https://fix.lcs.dynamics.com/Issue/R...&bugId=2816224.
This is basically extending the previously mentioned cleanup tool by also cleaning up records which have field Closed set to True! The reason why this is needed is basically because in certain scenarios, you might have no more quantities in InventSum for a certain combination of inventory dimensions, but there is still a value. In some cases, these values will disappear, but current design does allow values to remain from time to time. |
|
11.09.2019, 17:16 | #10 |
Модератор
|
примеряемся
__________________
-ТСЯ или -ТЬСЯ ? |
|
11.09.2019, 17:16 | #11 |
Участник
|
|
|
12.09.2019, 07:11 | #12 |
Участник
|
InventDim - сопутствующая таблица, и в большинстве случаев InventSum выбираем именно с ней. Поэтому объем записей в ней для нас также критичен. Регулярно подчищаем, чтобы не было неиспользованных записей. Нулевые записи в InventSum тоже убираем (ну там 1 млн из 30 удалится - и то хорошо).
__________________
// no comments |
|
Теги |
ax 2012 r3, ax2012r3, performance, sp_whsonhand, sp_whsonhandwithdelta, whs, полезное, производительность |
|
|