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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.01.2016, 20:08   #1  
Art_Tanis is offline
Art_Tanis
Участник
 
225 / 36 (2) +++
Регистрация: 04.02.2014
Проблема с запросом
добрый день!
Вот такой запрос исполняется очень медленно. Не могу понять причину.
AX 2009 SP7.
X++:
static void _HTC_GetStockForItem(Args _args)
{
    Dialog                          dialog = new dialog();
    DialogField                     dlgItemId;
    DialogField                     dlgTransDate;
    ItemId                          itemId;
    TransDate                       transDate;
    InventSumDateValueReport        onhand;
    Qty                             qty;
    InventSettlement                inventSettlement;
    InventTrans                     inventTrans;
    InventTransPosting              inventTransPostingPhysical;
    ;
    dlgItemId = dialog.addFieldValue(typeid(ItemId),itemId);
    dlgTransDate = dialog.addFieldValue(typeid(TransDate),transDate);
    dialog.run();

    transDate = dlgTransDate.value();
    itemId = dlgItemId.value();

    //onhand = InventSumDateValueReport::newParameters(transDate,itemId);
    //qty = onhand.physicalQuantity();

    //info(strfmt("%1| %2", itemId, qty));
        while select forceplaceholders sum(CostAmountAdjustment) from inventSettlement
        index hint ItemDateIdx
        where inventSettlement.ItemId                 == itemId                           &&
              inventSettlement.Cancelled              == NoYes::No                        &&
              inventSettlement.TransDate              >  transDate                          &&
              /* <SYS>
              inventSettlement.SettleModel  == InventSettleModel::PhysicalValue
              </SYS> */
              // <GEEU>
              inventSettlement.SettleModel            == InventSettleModel::PhysicalValue &&
              inventSettlement.InventTransCurrency_RU == InventTransCurrency_RU::PrimaryCur
              // </GEEU>
    join TableId from inventTrans
        index hint RecId
        where inventTrans.RecId             == inventSettlement.TransRecId  &&
              (inventTrans.StatusIssue      == StatusIssue::Sold            ||
              inventTrans.StatusReceipt     == StatusReceipt::Purchased)    &&
              inventTrans.DatePhysical      <= transDate
    join IsPosted from inventTransPostingPhysical
        index hint DateVoucherTransIdx
        group by IsPosted
        where inventTrans.VoucherPhysical                           == inventTransPostingPhysical.Voucher           &&
              inventTrans.DatePhysical                              == inventTransPostingPhysical.TransDate         &&
              inventTrans.InventTransId                             == inventTransPostingPhysical.InventTransId     &&
              inventTransPostingPhysical.InventTransPostingType     == InventTransPostingType::Physical             &&
              inventTransPostingPhysical.IsPosted                   == inventSettlement.Posted
              {
                qty = -inventSettlement.CostAmountAdjustment;
              }

   info(strfmt("%1| %2", itemId, qty));
}

Проблема такая - у меня на ноутбуке исполняется мнгновенно. На сервере с 32 гигами оперативки исполяется запрос 5 секунд.
Подскажите как посмотреть в чем дело?
Старый 12.01.2016, 07:24   #2  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Исключить влияние кеша при проведении эксперимента.
Смотреть план выполнения запроса.
Старый 12.01.2016, 08:44   #3  
KiselevSA is offline
KiselevSA
Злыдни
Аватар для KiselevSA
Злыдни
Лучший по профессии 2015
 
958 / 333 (13) ++++++
Регистрация: 25.01.2002
Адрес: Москва
А какие размеры базы на ноутбуке и на сервере? Наверняка количество записей в транзакционных таблицах отличаются на 3-4 порядка. Рекомендую обновить статистику на сервере и выполнить запрос повторно. Если не помогает, убрать хинты из запроса, попробовать выполнить запрос. Если опять время длительное, получить текст запроса и скормить оптимизатору SQL на сервере. Посмотреть, на какой части запроса наибольшие потери и какой индекс предлагается добавить для ускорения запроса.
__________________
люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании.
Старый 12.01.2016, 11:34   #4  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,158 / 1286 (47) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Про сравнение планов запроса уже написали. У меня к самому запросу некоторые замечания.
Непонятно зачем нужна выборка IsPosted и группировка по нему. В InventTransPosting и так уникальность есть по сочетанию Ваучер/Дата/Лот/Тип разноски. Соединение с InventTransd + фильтр все их использует. В классе InventSumDateValueReportDim это поле хотя бы используется (но и там вполне можно было обойтись без его выборки).
Я думаю, что вполне можно убрать группировку и вместо выборки поля выбирать TableId.
Кстати, заметьте, что в этом стандартном классе разные запросы для разных настроек складских аналитик.
Старый 12.01.2016, 12:52   #5  
Art_Tanis is offline
Art_Tanis
Участник
 
225 / 36 (2) +++
Регистрация: 04.02.2014
Разницы нет абсолютно - бд то скачанная - размер и струтура таже. Посмотрел в execution plan - cost is on sort (33%) and primary key cluster insert (29 %)
На ноутбуке выполняется так быстро что даже нечего смотреть.
Щас попробую сделать rebuild indexes
Старый 12.01.2016, 14:29   #6  
Art_Tanis is offline
Art_Tanis
Участник
 
225 / 36 (2) +++
Регистрация: 04.02.2014
Вобщем как итог ребилд сделал - все быстро работет. Большое спасибо всем. Просто громадное.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Проблема с запросом Borsugg DAX: Программирование 7 22.11.2013 15:17
Проблема с запросом Raduga DAX: Программирование 7 07.04.2010 14:00
Проблема с SQL запросом kalex_a DAX: Программирование 15 31.03.2010 11:28
Проблема с запросом kalex_a DAX: Программирование 2 17.08.2009 08:05
Проблема с запросом Protey DAX: Программирование 7 10.07.2006 09:32

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 08:03.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.