|
![]() |
#1 |
Участник
|
Цитата:
Запросы выполняются достаточно быстро (в среднем ~ 20 мс). НО! В стандартном механизме создания строк журнала инвентаризации для расчёта количества inventJournalTrans.inventOnHand используется класс InventSumDate (а это уже не один запрос, а 10-20). Плюс на подготовку и запись строки 150мс. Итого в среднем на строку 500мс. Если 30 000 строк: 30 000 * 0,5 (с) / 3600 (с/час) = 2,8 часа. Это долго. Что тут можно оптимизировать? Наверное, только модифицировать алгоритм... В том числе и алгоритм записи строк. ![]() |
|
![]() |
#2 |
Участник
|
Цитата:
Пока читайте здесь http://axapta.mazzy.ru/lib/inventsumdate/ Пошел считать количество запросов. |
|
![]() |
#3 |
Участник
|
Цитата:
InventCountCreate_Base.createInventJournalTrans Во-вторых, вызывается InventSumDatePhysicalDim: ![]() В-третьих, вызывается не 10-20 запросов, а 5 1. inventsum 2. для разнесенных финансово (для вычитания из inventSum) 3. для разнесенных физически (для вычитания из inventSum) 4. для скомплектованных (для вычитания из inventSum) 5. для зарегистрированных (для вычитания из inventSum) Если вы сумели получить эти данные ОДНИМ(!) запросом, снимаю шляпу. Но, скорее всего, вы написали ваш единственный исходя из сильно упрощенных предположений. Кстати, если у вас не используется комплектация/регистрация/физические разноски, то запросы по ним должны выполняться очень быстро, поскольку должны возвращать пустой recordset. Если же вы используете, то 2,3,4,5 запросы при правильной работе должны возвращать очень небольшую выборку... Скорее всего, тормоза в стандартном запросе связаны не с количеством запросов, а с наличием index hint'ов. Но index hint и вообще index'ы надо настраивать для всей системы. В общем, не убедили. Скорее всего, вы просто не ухаживаете за вашей Аксаптой. Скорее всего, при переписывании вы сильно упрощаете и обрезаете свой функционал (в дальнейшем вам будет очень сложно его включить обратно) |
|
![]() |
#4 |
Участник
|
|
|