AXForum  
Zurück   AXForum > Microsoft Dynamics AX > DAX: Прочие вопросы
All
Kennwort vergessen?
Registrieren Forum Rules Hilfe Benutzerliste Heutige Beiträge Suchen Alle Foren als gelesen markieren

 
 
Themen-Optionen Thema durchsuchen Ansicht
Alt 23.12.2011, 13:10   #41  
Zabr ist offline
Zabr
Участник
Axapta Retail User
 
1.202 / 345 (14) ++++++
Registriert seit: 26.06.2002
Ort: Москва
Zitat:
Zitat von Vadik Beitrag anzeigen
Может кто-то поделиться статистикой - какие аналитики используются и как, количество записей в InventDim до и после, общие впечатления (по возможности - объективные) ? Просто не очень понятно, что там такого можно понавычистить и что от этого улучшится
P.S. что можно поломать, случайно вычистив не то что надо, я в общих чертах представляю
Удалилось >20%.
Строки заказа на покупку создаются, потом удаляются - а записи в InventDim остаются.
Текущий размер таблицы InventDim >11 млн.записей.

Geändert von Zabr (23.12.2011 um 13:12 Uhr)
Alt 23.12.2011, 13:11   #42  
Logger ist offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3.985 / 3273 (117) ++++++++++
Registriert seit: 12.10.2004
Ort: Москва
Blog-Einträge: 2
А сильно помогли эти 20 % ?
Alt 23.12.2011, 13:18   #43  
Zabr ist offline
Zabr
Участник
Axapta Retail User
 
1.202 / 345 (14) ++++++
Registriert seit: 26.06.2002
Ort: Москва
Zitat:
Zitat von Logger Beitrag anzeigen
А сильно помогли эти 20 % ?
Не знаю. Надо было замерять какие-то запросы до и после, я этого не делал. Но по отдельным складам число InventDim сократилось более чем вдвое, так что думаю это сказалось на производительности всех тех запросов, где джойнится InventDim с условием по конкретному складу.
Alt 23.12.2011, 13:42   #44  
Logger ist offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3.985 / 3273 (117) ++++++++++
Registriert seit: 12.10.2004
Ort: Москва
Blog-Einträge: 2
Zitat:
Zitat von Zabr Beitrag anzeigen
Не знаю. Надо было замерять какие-то запросы до и после, я этого не делал. Но по отдельным складам число InventDim сократилось более чем вдвое, так что думаю это сказалось на производительности всех тех запросов, где джойнится InventDim с условием по конкретному складу.
Склад в InventDim - это вообще подстава. Не надо было им смешивать высокоселективные аналитики (партия, серийник, ГТД) и низкоселективные.

Денормализацию не пробовали ?
Alt 25.07.2012, 11:57   #45  
Ace of Database ist offline
Ace of Database
Участник
Benutzerbild von Ace of Database
 
877 / 649 (23) +++++++
Registriert seit: 14.10.2004
Тоже возникла заинтересованность в удалении лишних InventDim.
Написал SQL - запрос, который может быть актуален для Аксапты, в которой ведутся продажи, закупки, складские журналы, журналы прибытия и отгрузки.
По моей базе из 6 млн аналитик неиспользуемых получается 50% - 3 млн.
Аналитика может присутствовать в строке заказа, но осутствовать в складских проводках и в InventSum, так как в результате работы резервирования аналитика в проводках меняется, а строках заказа нет.
Данный запрос я на боевой базе пока не запускал. Еще бы туда по идее надо добавить транспортировки палет и прочие журналы, в которых используется складская аналитика. И еще бы можно было добавить проверку на аналитику "Куда" в строках складского журнала, но я пока решил не проверять это, так как сохранение строк журналов переноса для нас неактуально
Проверка на использование аналитики в строках документов нужна для того, чтобы строки из аксаптовских форм не исчезли после удаления аналитики.
X++:
delete from INVENTDIM where 
not exists
(select RECID from InventSum where InventSum.DATAAREAID = InventDim.DATAAREAID and
InventSum.INVENTDIMID = InventDim.INVENTDIMID)
and not exists
(select RECID from InventTrans where InventTrans.DATAAREAID = InventDim.DATAAREAID and
InventTrans.INVENTDIMID = InventDim.INVENTDIMID)
and not exists
(select RECID from SalesLine where SalesLine.DATAAREAID = InventDim.DATAAREAID and
SalesLine.INVENTDIMID = InventDim.INVENTDIMID)
and not exists
(select RECID from PurchLine where PurchLine.DATAAREAID = InventDim.DATAAREAID and
PurchLine.INVENTDIMID = InventDim.INVENTDIMID)
and not exists
(select RECID from InventJournalTrans where InventJournalTrans.DATAAREAID = InventDim.DATAAREAID and
InventJournalTrans.INVENTDIMID = InventDim.INVENTDIMID
)
and not exists
(select RECID from WMSOrderTrans where WMSOrderTrans.DATAAREAID = InventDim.DATAAREAID and
WMSOrderTrans.INVENTDIMID = InventDim.INVENTDIMID)
and not exists
(select RECID from WMSJournalTrans where WMSJournalTrans.DATAAREAID = InventDim.DATAAREAID and
WMSJournalTrans.INVENTDIMID = InventDim.INVENTDIMID)

Geändert von Ace of Database (25.07.2012 um 12:01 Uhr)
Alt 25.07.2012, 12:57   #46  
Wamr ist offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1.737 / 868 (32) +++++++
Registriert seit: 15.01.2002
Ort: Москва
Blog-Einträge: 7
а слабо джобик в аксе написать, который пробежит по всем табличкам, где есть данные и поля с ссылкой на InventDim и сгенерит по ним такой скрипт?
Alt 25.07.2012, 17:37   #47  
KiselevSA ist offline
KiselevSA
Злыдни
Benutzerbild von KiselevSA
Злыдни
Лучший по профессии 2015
 
958 / 333 (13) ++++++
Registriert seit: 25.01.2002
Ort: Москва
Я бы поостерегся удалять таким образом: достаточно в справочнике номенклатур внести одну услугу и InventSum уже не будет работать.
__________________
люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании.
Alt 25.07.2012, 18:27   #48  
Владимир Максимов ist offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1.715 / 1204 (44) ++++++++
Registriert seit: 13.01.2004
Blog-Einträge: 3
Ace of Database

Таблицы, хранящие интегральные (суммовые) показатели не могут служить критерием "использования" складской аналитики. В данном случае имею в виду InventSum

Другими словами, наличие записи в таблице складских остатков не может являться "оправданием" факта существования складской аналитики. Должна быть ссылка на складскую аналитику где-то еще.

Как следствие, в приведенном SQL-запросе exists(... from InventSum ...) - лишний. Если складской аналитики нет больше нигде, кроме как в складских остатках, то такую аналитику тоже надо удалить!

Соответственно, следующий логичный шаг - второй запрос, который удаляет записи складских остатков, если они ссылаются на не существующую (возможно, удаленную на первом шаге) складскую аналитику.
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Alt 25.07.2012, 18:30   #49  
Владимир Максимов ist offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1.715 / 1204 (44) ++++++++
Registriert seit: 13.01.2004
Blog-Einträge: 3
Zitat:
Zitat von Wamr Beitrag anzeigen
а слабо джобик в аксе написать, который пробежит по всем табличкам, где есть данные и поля с ссылкой на InventDim и сгенерит по ним такой скрипт?
Так написано уже И даже не джобик а полноценный класс. Мой проект на предыдущей закладке. Там для 2.5 вообще-то, но отличия от исходного скрипта незначительные. В основном по правам доступа.
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Alt 24.01.2018, 13:10   #50  
БАХ43 ist offline
БАХ43
Участник
 
92 / 54 (2) ++++
Registriert seit: 15.02.2013
Ort: г.Москва, г. Зеленоград
Тоже недавно понадобилось почистить неиспользуемые InventDim. Использовал класс InventUnusedDimCleanUp. Все прекрасно, за час-два осталось 7 млн записей из 16 млн. НО!!! После этого залез в таблицу и невооруженным глазом заметил несколько явно неиспользуемых аналитик. В методе deleteUsedIdsFromCleanUpTable поставил заплаточку:
X++:
while( listEnumerator.moveNext() )
    {
// ->
        select firstonly inventDimCleanUp
            where        inventDimCleanUp.InventDimId    == "УЗАН000434";

        if (!inventDimCleanUp && tableId)
        {
            warning(strfmt("Аналитика = %1 найдена в таблице %2 (%3) (%4)", inventDimCleanUp.InventDimId, tableid2pname(tableId), tableid2name(tableId), fieldId2name(tableId, fieldId)));
        }
// <-
        tableAndField = listEnumerator.current();
        tableId = conpeek(tableAndField, 1);
        fieldId = conpeek(tableAndField, 2);
по которой определил, что искомая аналитика удаляется при анализе таблицы WMSOrder. В этой таблице такой аналитики не оказалось ни в InventDimId, ни в toInventDimId. Задумался о легитимности метода deleteInventDimCleanUp.
Поставил еще одну заплаточку:
X++:
        tableAndField = listEnumerator.current();
        tableId = conpeek(tableAndField, 1);
        fieldId = conpeek(tableAndField, 2);
// ->        
        dictTable = new DictTable(tableId);
        common = dictTable.makeRecord();

        info(strfmt("%1 (%2) Id = %3", tableid2pname(tableId), tableid2name(tableId), tableId));

        select count(RecId) from inventDimCleanUp
            exists join common
                where inventDimCleanUp.InventDimId == common.(fieldId);
        warning(strfmt("Найдено %1 записей", inventDimCleanUp.RecId));
        
        select count(RecId) from inventDimCleanUp;
        recToDel = inventDimCleanUp.RecId;
// <-
        // Update progress bar
        progress.incCount();
        progress.setText( tableid2pname(tableId) );

        // The InventDim is being used, remove it from the list of unused InventDims
        this.deleteInventDimCleanUp(connection, tableId, fieldId);
        deleted ++;
//->        
        select count(RecId) from inventDimCleanUp;
        recToDel -= inventDimCleanUp.RecId;
        warning(strfmt("Удалено %1 записей", recToDel));
// <-
В итоге получил такой инфолог:
Code:
Складской заказ (WMSOrder) Id = 666
Найдено 37141 записей
Удалено 102098 записей
Складской заказ (WMSOrder) Id = 666
Найдено 23159 записей
Удалено 23161 записей
Проводки заказа запасов (WMSOrderTrans) Id = 716
Найдено 9 записей
Удалено 9 записей
Проводки заказа запасов (WMSOrderTrans) Id = 716
Найдено 856640 записей
Удалено 858638 записей
То есть оказалось, что запрос в X++
X++:
select count(RecId) from inventDimCleanUp
            exists join common
                where inventDimCleanUp.InventDimId == common.(fieldId);
и запрос, формируемый для SQL в методе deleteInventDimCleanUp
Code:
DELETE FROM INVENTDIMCLEANUP WHERE EXISTS (SELECT 'x' FROM WMSORDER T WHERE (INVENTDIMCLEANUP.INVENTDIMID = T.INVENTDIMID))
обрабатывают разное количество записей.
Кто подскажет, в чем может быть дело. Или плюнуть на высокую производительность запроса SQL и удалять записи через delete_from из X++ ???

Geändert von БАХ43 (24.01.2018 um 13:15 Uhr)
Alt 24.01.2018, 14:11   #51  
Владимир Максимов ist offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1.715 / 1204 (44) ++++++++
Registriert seit: 13.01.2004
Blog-Einträge: 3
Вы DataAreaId учитываете?
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
This post has been rated by: БАХ43 (1).
Alt 24.01.2018, 14:35   #52  
БАХ43 ist offline
БАХ43
Участник
 
92 / 54 (2) ++++
Registriert seit: 15.02.2013
Ort: г.Москва, г. Зеленоград
Я ждал этого вопроса. Нет, не учитываю. И в X++, и в SQL. Дело в том, что раньше база обслуживала несколько компаний, так что некоторые таблицы в виртуальных компаниях. Теперь реальная компания одна. Как раз и хотел почистить весь мусор оставшийся с прошлых лет.
Alt 24.01.2018, 14:59   #53  
БАХ43 ist offline
БАХ43
Участник
 
92 / 54 (2) ++++
Registriert seit: 15.02.2013
Ort: г.Москва, г. Зеленоград
Точно, туплю. В WMSOrder оказались еще данные из виртуальной компании, неприсоединенной к нашей. А запрос X++ выполняется в пределах выбранных виртуальных компаний.
Alt 19.12.2019, 16:45   #54  
Dobral ist offline
Dobral
Участник
 
1 / 10 (1) +
Registriert seit: 19.12.2019
Хочу поставить класс InventUnusedDimCleanUp для AX4.0, но увидел что есть обращение к таблице InventDimCleanUp. Нет в нашей AX такой таблицы. Что это за таблица? Очень нужно почистить InventDim c InventSum.

Geändert von Dobral (19.12.2019 um 17:08 Uhr)
Alt 19.12.2019, 17:09   #55  
БАХ43 ist offline
БАХ43
Участник
 
92 / 54 (2) ++++
Registriert seit: 15.02.2013
Ort: г.Москва, г. Зеленоград
Таблица, содержащая одно поле InventDimId
__________________
Я прибыл к вам из Кантемировской дивизии. А там, как известно, дураков не держат!
Stichworte
inventdim, inventsum, складская аналитика, удаление

 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
axforum blogs: Можно ли снизить стоимость внедрения ERP-системы? Blog bot DAX Blogs 0 11.02.2011 15:11
Производительность InventSum, InventDim AlexeyBP DAX: Администрирование 20 13.05.2007 12:58
«Как без последствий удалять ненужную номенклатуру готовой продукции ?» DaniK DAX: Функционал 3 24.12.2004 10:20
Как без последствий удалять ненужную номенклатуру готовой продукции ? DaniK DAX: Администрирование 1 23.12.2004 10:49
Что и как можно резать? George Nordic DAX: Администрирование 1 11.05.2004 18:44
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Gehe zu

Рейтинг@Mail.ru
Alle Zeitangaben in WEZ +3. Es ist jetzt 21:56 Uhr.
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.