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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.12.2011, 13:10   #41  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,202 / 345 (14) ++++++
Регистрация: 26.06.2002
Адрес: Москва
Цитата:
Сообщение от Vadik Посмотреть сообщение
Может кто-то поделиться статистикой - какие аналитики используются и как, количество записей в InventDim до и после, общие впечатления (по возможности - объективные) ? Просто не очень понятно, что там такого можно понавычистить и что от этого улучшится
P.S. что можно поломать, случайно вычистив не то что надо, я в общих чертах представляю
Удалилось >20%.
Строки заказа на покупку создаются, потом удаляются - а записи в InventDim остаются.
Текущий размер таблицы InventDim >11 млн.записей.

Последний раз редактировалось Zabr; 23.12.2011 в 13:12.
Старый 23.12.2011, 13:11   #42  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
А сильно помогли эти 20 % ?
Старый 23.12.2011, 13:18   #43  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,202 / 345 (14) ++++++
Регистрация: 26.06.2002
Адрес: Москва
Цитата:
Сообщение от Logger Посмотреть сообщение
А сильно помогли эти 20 % ?
Не знаю. Надо было замерять какие-то запросы до и после, я этого не делал. Но по отдельным складам число InventDim сократилось более чем вдвое, так что думаю это сказалось на производительности всех тех запросов, где джойнится InventDim с условием по конкретному складу.
Старый 23.12.2011, 13:42   #44  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Zabr Посмотреть сообщение
Не знаю. Надо было замерять какие-то запросы до и после, я этого не делал. Но по отдельным складам число InventDim сократилось более чем вдвое, так что думаю это сказалось на производительности всех тех запросов, где джойнится InventDim с условием по конкретному складу.
Склад в InventDim - это вообще подстава. Не надо было им смешивать высокоселективные аналитики (партия, серийник, ГТД) и низкоселективные.

Денормализацию не пробовали ?
Старый 25.07.2012, 11:57   #45  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
873 / 649 (23) +++++++
Регистрация: 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)

Последний раз редактировалось Ace of Database; 25.07.2012 в 12:01.
Старый 25.07.2012, 12:57   #46  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
а слабо джобик в аксе написать, который пробежит по всем табличкам, где есть данные и поля с ссылкой на InventDim и сгенерит по ним такой скрипт?
Старый 25.07.2012, 17:37   #47  
KiselevSA is offline
KiselevSA
Злыдни
Аватар для KiselevSA
Злыдни
Лучший по профессии 2015
 
958 / 333 (13) ++++++
Регистрация: 25.01.2002
Адрес: Москва
Я бы поостерегся удалять таким образом: достаточно в справочнике номенклатур внести одну услугу и InventSum уже не будет работать.
__________________
люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании.
Старый 25.07.2012, 18:27   #48  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Ace of Database

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

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

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

Соответственно, следующий логичный шаг - второй запрос, который удаляет записи складских остатков, если они ссылаются на не существующую (возможно, удаленную на первом шаге) складскую аналитику.
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 25.07.2012, 18:30   #49  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от Wamr Посмотреть сообщение
а слабо джобик в аксе написать, который пробежит по всем табличкам, где есть данные и поля с ссылкой на InventDim и сгенерит по ним такой скрипт?
Так написано уже И даже не джобик а полноценный класс. Мой проект на предыдущей закладке. Там для 2.5 вообще-то, но отличия от исходного скрипта незначительные. В основном по правам доступа.
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 24.01.2018, 13:10   #50  
БАХ43 is offline
БАХ43
Участник
 
92 / 54 (2) ++++
Регистрация: 15.02.2013
Адрес: г.Москва, г. Зеленоград
Тоже недавно понадобилось почистить неиспользуемые 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));
// <-
В итоге получил такой инфолог:
Код:
Складской заказ (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
Код:
DELETE FROM INVENTDIMCLEANUP WHERE EXISTS (SELECT 'x' FROM WMSORDER T WHERE (INVENTDIMCLEANUP.INVENTDIMID = T.INVENTDIMID))
обрабатывают разное количество записей.
Кто подскажет, в чем может быть дело. Или плюнуть на высокую производительность запроса SQL и удалять записи через delete_from из X++ ???

Последний раз редактировалось БАХ43; 24.01.2018 в 13:15.
Старый 24.01.2018, 14:11   #51  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Вы DataAreaId учитываете?
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
За это сообщение автора поблагодарили: БАХ43 (1).
Старый 24.01.2018, 14:35   #52  
БАХ43 is offline
БАХ43
Участник
 
92 / 54 (2) ++++
Регистрация: 15.02.2013
Адрес: г.Москва, г. Зеленоград
Я ждал этого вопроса. Нет, не учитываю. И в X++, и в SQL. Дело в том, что раньше база обслуживала несколько компаний, так что некоторые таблицы в виртуальных компаниях. Теперь реальная компания одна. Как раз и хотел почистить весь мусор оставшийся с прошлых лет.
Старый 24.01.2018, 14:59   #53  
БАХ43 is offline
БАХ43
Участник
 
92 / 54 (2) ++++
Регистрация: 15.02.2013
Адрес: г.Москва, г. Зеленоград
Точно, туплю. В WMSOrder оказались еще данные из виртуальной компании, неприсоединенной к нашей. А запрос X++ выполняется в пределах выбранных виртуальных компаний.
Старый 19.12.2019, 16:45   #54  
Dobral is offline
Dobral
Участник
 
1 / 10 (1) +
Регистрация: 19.12.2019
Хочу поставить класс InventUnusedDimCleanUp для AX4.0, но увидел что есть обращение к таблице InventDimCleanUp. Нет в нашей AX такой таблицы. Что это за таблица? Очень нужно почистить InventDim c InventSum.

Последний раз редактировалось Dobral; 19.12.2019 в 17:08.
Старый 19.12.2019, 17:09   #55  
БАХ43 is offline
БАХ43
Участник
 
92 / 54 (2) ++++
Регистрация: 15.02.2013
Адрес: г.Москва, г. Зеленоград
Таблица, содержащая одно поле InventDimId
__________________
Я прибыл к вам из Кантемировской дивизии. А там, как известно, дураков не держат!
Теги
inventdim, inventsum, складская аналитика, удаление

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
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
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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