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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.01.2010, 18:42   #1  
Alexanderrrr is offline
Alexanderrrr
Участник
Аватар для Alexanderrrr
 
54 / 19 (1) ++
Регистрация: 06.03.2009
Адрес: Саратов
InventSum
Доброго всем времени суток!

Решил обратиться за помощью к гуру акспапты.

sql 2000 axapta 3.0 sp5

после изменения механизма расчета аванса появились блокировки на таблице inventsum, в которой у нас всего 13 записей..(при одновременном расчете)
включив sql-трассировку, получаю вот:
Код:
252655 мс на 'EXECUTE+FETCH (execute, first chunk of data)': SELECT A.ITEMID,A.POSTEDQTY,A.POSTEDVALUE,A.DEDUCTED,A.RECEIVED,A.RESERVPHYSICAL,A.RESERVORDERED,A.ONORDER,A.ORDERED,A.QUOTATIONISSUE,A.QUOTATIONRECEIPT,A.DEL_CONFIGID,A.INVENTDIMID,A.CLOSED,A.REGISTERED,A.PICKED,A.AVAILORDERED,A.AVAILPHYSICAL,A.PHYSICALVALUE,A.ARRIVED,A.PHYSICALINVENT,A.CLOSEDQTY,A.LASTUPDDATEPHYSICAL,A.LASTUPDDATEEXPECTED,A.POSTEDVALUESECCUR_RU,A.PHYSICALVALUESECCUR_RU,A.RECVERSION,A.RECID FROM INVENTSUM A WITH( INDEX(I_174ITEMDIMIDX), UPDLOCK) WHERE ((DATAAREAID=?) AND ((ITEMID=?) AND (INVENTDIMID=?))) OPTION(FAST 1)
это только при расчете одной точки учета.

тормозит в методе
X++:
static InventSum find(ItemId            itemId,
                      InventDimId       dimId,
                      boolean           _forUpdate = false)
{
    InventSum  inventSum;
    ;
    if (_forUpdate)
    {
        inventSum.selectForUpdate(_forUpdate);
        if (appl.inventUpdateTTSControl().mustUseTTSSystem())
            inventSum.setConnection(appl.inventUpdateTTSControl().DBConnectionUpd());
    }

    if (itemId)
        select firstonly inventSum
            index hint ItemDimIdx
            where inventSum.itemId              == itemId    &&
                  inventSum.inventDimId         == dimId;

    return inventSum;
}
на селекте inventSum..

люди добрые, помогите

index hint убирал, не помогает..(
__________________
..в каждой программе есть хотя бы одна ошибка..
Старый 09.01.2010, 01:04   #2  
Weez is offline
Weez
Участник
Axapta Retail User
 
250 / 84 (3) ++++
Регистрация: 18.01.2006
Адрес: Moscow city
попробуйте перестроить индексы таблицы inventsum (переиндексация из аксапты)
__________________
Существует 10 типов людей: одни понимают двоичную систему, другие - нет.
Старый 09.01.2010, 07:53   #3  
Alexanderrrr is offline
Alexanderrrr
Участник
Аватар для Alexanderrrr
 
54 / 19 (1) ++
Регистрация: 06.03.2009
Адрес: Саратов
Цитата:
попробуйте перестроить индексы таблицы inventsum (переиндексация из аксапты)
реиндексацию, синхронизацию делал не раз, не помогает.
У нас и еженочной джоб есть на ренидексацию..
__________________
..в каждой программе есть хотя бы одна ошибка..
Старый 09.01.2010, 09:11   #4  
Alexanderrrr is offline
Alexanderrrr
Участник
Аватар для Alexanderrrr
 
54 / 19 (1) ++
Регистрация: 06.03.2009
Адрес: Саратов
при аналогичном расчете на тестовом приложении, если делать его в одиночестве, зависаний на inventsum не наблюдается..
__________________
..в каждой программе есть хотя бы одна ошибка..
Старый 09.01.2010, 14:23   #5  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
_forUpdate = true или false?
если true, то попробуйте закоментить
X++:
if (appl.inventUpdateTTSControl().mustUseTTSSystem())
            inventSum.setConnection(appl.inventUpdateTTSControl().DBConnectionUpd());
setConnection(); все вешает. Посмотрите по поиску как ето лечить. Помоему где то уже обсуждалось.
честно признаюсь не знаю нафига это там вставлено , но если закоментить, то блокировок не будет скорее всего. но наверно ето не правильно
Да и Аксы под рукой нет(отдыхаем веть) чтоб что-либо проверить. А что такое "точка учета?". Просто интересно.

Последний раз редактировалось Sada; 09.01.2010 в 14:31.
За это сообщение автора поблагодарили: Alexanderrrr (1).
Старый 09.01.2010, 15:08   #6  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от Sada Посмотреть сообщение
честно признаюсь не знаю нафига это там вставлено
Это код для поддержки IMTS, если его закомментировать, лучше точно не станет (при неиспользуемом IMTS - ничего не изменится, при использовании - станет хуже именно за счет блокировок именно на InentSum)
Alexanderrrr, Вы не там ищете. Блокировки в InventSum.find() - это следствие, а причина где-то в дебрях "расчета аванса", который зачем-то выполняет блокировку запасов в наличии, его и копайте
__________________
-ТСЯ или -ТЬСЯ ?
За это сообщение автора поблагодарили: Alexanderrrr (1).
Старый 09.01.2010, 16:01   #7  
Alexanderrrr is offline
Alexanderrrr
Участник
Аватар для Alexanderrrr
 
54 / 19 (1) ++
Регистрация: 06.03.2009
Адрес: Саратов
во-первых, спасибо за ответы!

Цитата:
Alexanderrrr, Вы не там ищете. Блокировки в InventSum.find() - это следствие, а причина где-то в дебрях "расчета аванса", который зачем-то выполняет блокировку запасов в наличии, его и копайте
подозрения у меня на вот этот метод:
X++:
/*
Select table InventSum for update
*/

public InventSum inventSumSelectLocked(InventTrans inventTrans)
{
     InventSum inventSum;
   ;
    if (!this.mustUseTTSSystem())
        inventSum = InventSum::find(inventTrans.itemId,inventTrans.inventDimId,true);
    else
    {
        if (!this.dBConnectionUpd() || !TTSLevel_Upd || !appl.ttsLevel())
            throw error(strfmt("@SYS69842",funcname()));

        inventSum.setConnection(this.dBConnectionUpd());
    
        select firstonly forupdate inventSum
            index hint itemDimIdx
            where inventSum.ItemId      == inventTrans.itemId   &&
                  inventSum.InventDimId == inventTrans.inventDimId;
    }
    return inventSum;  
}
он вызывается из inventtrans.update:
X++:
void update(NoYes dropInventOnHand= NoYes::No)
{
    InventTrans     this_Orig;
    InventSum       inventSum;

    ttsbegin;

    this.setStatusDate();
    this.setClosedOpen();
    //Dual Warehouse -->
    this.setClosedOpenSecCur_RU();
    //Dual Warehouse <--
    this.setDirection();

    if (!dropInventOnHand)
    {
        this_Orig  = this.orig();

        appl.inventUpdateTTSControl().setTTSBeginUpd();

        if (InventSum::mustInventTransBeUpdated(this,this_Orig))
        {
            inventSum = appl.inventUpdateTTSControl().inventSumSelectLocked(this);

            if (!inventSum.canInventTransBeUpdated(this_Orig))
            {
                inventSum.updateInventTrans(this,NoYes::Yes,null,false);

                inventSum = appl.inventUpdateTTSControl().inventSumSelectLocked(this_Orig);

                inventSum.updateInventTrans(this_Orig,NoYes::No,null,true);
            }
            else
                inventSum.updateInventTrans(this,NoYes::Yes,this_Orig);
        }
        else if (InventSum::mustInventTransBeLogUpdated(this,this_Orig))
        {
            appl.inventUpdateTTSControl().insertInventSumLogTTS(this,NoYes::Yes,inventSum);
            appl.inventUpdateTTSControl().insertInventSumLogTTS(this_Orig,NoYes::No,inventSum,true);
        }
        this.updateTransIdReturn();

        appl.inventUpdateTTSControl().setTTSCommitUpd();
    }

    super();

    ttscommit;
}
только в чем дело, понять пока не могу..
__________________
..в каждой программе есть хотя бы одна ошибка..

Последний раз редактировалось Alexanderrrr; 09.01.2010 в 16:12.
Старый 09.01.2010, 18:59   #8  
Yprit is offline
Yprit
Злыдни
Аватар для Yprit
Злыдни
 
419 / 93 (4) ++++
Регистрация: 22.02.2004
Адрес: СПб
Alexanderrrr, послушайте внимательно участника Vadik - он дело говорит. Посмотрите - какой процесс в этот момент блокирует InventSum, откуда происходит блокировка.
Старый 10.01.2010, 20:38   #9  
Alexanderrrr is offline
Alexanderrrr
Участник
Аватар для Alexanderrrr
 
54 / 19 (1) ++
Регистрация: 06.03.2009
Адрес: Саратов
Цитата:
Alexanderrrr, послушайте внимательно участника Vadik - он дело говорит. Посмотрите - какой процесс в этот момент блокирует InventSum, откуда происходит блокировка.
не могли бы вы мне подсказать, каким образом это лучше сделать?
простите, если вопрос покажется глупым
__________________
..в каждой программе есть хотя бы одна ошибка..
Старый 11.01.2010, 08:55   #10  
Yprit is offline
Yprit
Злыдни
Аватар для Yprit
Злыдни
 
419 / 93 (4) ++++
Регистрация: 22.02.2004
Адрес: СПб
Цитата:
Сообщение от Alexanderrrr Посмотреть сообщение
не могли бы вы мне подсказать, каким образом это лучше сделать?
Ну коль скоро такой вопрос возник, то лучше взять за жабры вашего администратора БД и его озадачить
Старый 11.01.2010, 09:06   #11  
Alexanderrrr is offline
Alexanderrrr
Участник
Аватар для Alexanderrrr
 
54 / 19 (1) ++
Регистрация: 06.03.2009
Адрес: Саратов
как я понял в axapta 3.0 существует проблема с блокировками на inventsum..
пользователи получают сообщение о "тупиковой ситуации"..
http://www.ms-dynamics.ru/blog/2007/...s-ax-4-i-imts/
пока непонятно только, почему это проблема возникла только сейчас..что же я зацепил..
__________________
..в каждой программе есть хотя бы одна ошибка..
Старый 11.01.2010, 09:33   #12  
Yprit is offline
Yprit
Злыдни
Аватар для Yprit
Злыдни
 
419 / 93 (4) ++++
Регистрация: 22.02.2004
Адрес: СПб
Так у вас IMTS включено или нет?
Старый 11.01.2010, 10:15   #13  
Alexanderrrr is offline
Alexanderrrr
Участник
Аватар для Alexanderrrr
 
54 / 19 (1) ++
Регистрация: 06.03.2009
Адрес: Саратов
Цитата:
Так у вас IMTS включено или нет?
выключено (оптимистичный принцип, периодическая очистка 3600 секунд)
включить?
__________________
..в каждой программе есть хотя бы одна ошибка..
Старый 11.01.2010, 10:32   #14  
Yprit is offline
Yprit
Злыдни
Аватар для Yprit
Злыдни
 
419 / 93 (4) ++++
Регистрация: 22.02.2004
Адрес: СПб
Цитата:
Сообщение от Alexanderrrr Посмотреть сообщение
включить?
Нет, не стОит.
Alexanderrrr, Вы знаете, что такое блокировки? Что вы имели в виду, когда писали "при одновременном расчете"? Название процедуры sp_who2, например, Вам о чем-нибудь говорит?

Последний раз редактировалось Yprit; 11.01.2010 в 10:35.
Старый 11.01.2010, 10:41   #15  
Alexanderrrr is offline
Alexanderrrr
Участник
Аватар для Alexanderrrr
 
54 / 19 (1) ++
Регистрация: 06.03.2009
Адрес: Саратов
Цитата:
Нет, не стОит.
Alexanderrrr, Вы знаете, что такое блокировки? Что вы имели в виду, когда писали "при одновременном расчете"? Название процедуры sp_who2, например, Вам о чем-нибудь говорит?
да, sp_who2 в работе использую постоянно, и в момент расчета блокировки там присутствовали.
зачем на inventsum нужны блокировки мне понятно, и что такое блокировки тоже.
под одновременным расчетом имелся ввиду запуск расчета несколькими юзерами.
почитал про imts..дело в том, что мы не используем режим управления запасами на предприятии.
__________________
..в каждой программе есть хотя бы одна ошибка..
Старый 11.01.2010, 10:57   #16  
Yprit is offline
Yprit
Злыдни
Аватар для Yprit
Злыдни
 
419 / 93 (4) ++++
Регистрация: 22.02.2004
Адрес: СПб
Цитата:
Сообщение от Alexanderrrr Посмотреть сообщение
дело в том, что мы не используем режим управления запасами на предприятии.
Тогда посмотрите на стэк вызовов - откуда и зачем у вас InventTrans с InventSum обновляются, если "режим управления запасами не используется". И посмотрите, кто "держит" InventSum в момент возникновения блокировки. Может, у вас один процесс расчета схватил эти несчастные 13 записей и не отпускает, пока свои мифические авансы не досчитает. Вот остальные процессы и курят по 5 минут.....
За это сообщение автора поблагодарили: Alexanderrrr (1).
Старый 11.01.2010, 11:45   #17  
Alexanderrrr is offline
Alexanderrrr
Участник
Аватар для Alexanderrrr
 
54 / 19 (1) ++
Регистрация: 06.03.2009
Адрес: Саратов
Цитата:
Тогда посмотрите на стэк вызовов - откуда и зачем у вас InventTrans с InventSum обновляются, если "режим управления запасами не используется". И посмотрите, кто "держит" InventSum в момент возникновения блокировки. Может, у вас один процесс расчета схватил эти несчастные 13 записей и не отпускает, пока свои мифические авансы не досчитает. Вот остальные процессы и курят по 5 минут.....
спасибо, тогда такой вопрос..
а могу ли я вообще исключить операции с InventTrans, InventSum в процессе расчета, если учесть, что режим "управление запасами" мы не юзаем? ведь это из стандартного функционала..
__________________
..в каждой программе есть хотя бы одна ошибка..
Старый 11.01.2010, 12:01   #18  
Yprit is offline
Yprit
Злыдни
Аватар для Yprit
Злыдни
 
419 / 93 (4) ++++
Регистрация: 22.02.2004
Адрес: СПб
смотря что Вы называете "механизмом расчета аванса"...
Старый 12.01.2010, 07:43   #19  
Alexanderrrr is offline
Alexanderrrr
Участник
Аватар для Alexanderrrr
 
54 / 19 (1) ++
Регистрация: 06.03.2009
Адрес: Саратов
попробовал включить imts..
включение imts на тестовом сервере помогло ликвидировать блокировки на inventsum, да и быстрее расчет стал отрабатывать..буду искать подводные камни и пробовать на сервере боевом
__________________
..в каждой программе есть хотя бы одна ошибка..
Теги
блокировки

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
lookup для ItemId iz InventTable + InventDim + InventSum stalker25 DAX: Программирование 6 20.07.2009 15:50
RecordSet у inventSum CasperSKY DAX: Программирование 3 21.03.2008 15:52
Ошибка при разноске складских движений Starling DAX: Администрирование 9 12.10.2007 14:21
Проверка уникальности ItemDimIdx в InventSum DreamCreator DAX: Программирование 15 06.12.2005 17:23
Форма InventOnhandItem, Почему RecID у InventSum в этой форме всегда 0? Кирилл DAX: Программирование 2 25.05.2004 18:15

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

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

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