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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 30.03.2011, 17:44   #1  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,202 / 345 (14) ++++++
Регистрация: 26.06.2002
Адрес: Москва
Можно ли удалять InventDim и InventSum без проводок?
Можно ли смело удалять InventDim и InventSum без Inventtrans (в Ax 4.0) ? У меня из 10 млн. записей примерно 39% оказалось именно таких. Предполагаю, что это последствия массового создания и удаления заказов на покупку, по которым не обрабатывается затем никаких накладных. В InventDim используются только Склад и Размер.
Сам-то думаю, что можно. Но на всякий случай перестраховываюсь этим вопросом.
Старый 30.03.2011, 18:00   #2  
Alexius is offline
Alexius
Участник
Аватар для Alexius
 
461 / 248 (9) ++++++
Регистрация: 13.12.2001
Смело нельзя
InventDim необходимо проверить на связи еще по куче табличек
По InventSum не вижу препятствий
За это сообщение автора поблагодарили: Zabr (3).
Старый 30.03.2011, 18:05   #3  
Poleax is offline
Poleax
Модератор
Аватар для Poleax
MCP
MCBMSS
Злыдни
 
1,353 / 595 (22) +++++++
Регистрация: 17.02.2005
Адрес: msk
Записей в блоге: 34
Как удалить неиспользуемые InventDim

Чистим InventSum, потом Пересчет inventSum
__________________

This posting is provided "AS IS" with no warranties, and confers no rights.
За это сообщение автора поблагодарили: Zabr (3).
Старый 30.03.2011, 18:05   #4  
ice321i is offline
ice321i
Участник
 
63 / 54 (2) ++++
Регистрация: 22.10.2007
Можно попробовать Периодической операцией УЗ\Периодические операции\Очистка\Очистить не используемые складские аналитики, не знаю есть ли она в 4-ке, в 5-ке есть.
За это сообщение автора поблагодарили: mazzy (2), Zabr (3), someOne (1).
Старый 30.03.2011, 18:12   #5  
Poleax is offline
Poleax
Модератор
Аватар для Poleax
MCP
MCBMSS
Злыдни
 
1,353 / 595 (22) +++++++
Регистрация: 17.02.2005
Адрес: msk
Записей в блоге: 34
Грех не добавить в тему ликну на статью База данных Аксапты быстро растет. Что делать?
Не совсем про InventDim и InventSum, но "как бы" по теме
__________________

This posting is provided "AS IS" with no warranties, and confers no rights.
Старый 31.03.2011, 13:10   #6  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,202 / 345 (14) ++++++
Регистрация: 26.06.2002
Адрес: Москва
Цитата:
Первый InventDim проверяет уже 4 минуты. При нашем объеме - это примерно 80 лет чистого времени на проверку всей таблицы. Я не доживу.
Старый 31.03.2011, 13:32   #7  
someOne is offline
someOne
Участник
Аватар для someOne
 
174 / 429 (15) +++++++
Регистрация: 11.12.2008
Адрес: Москва
Цитата:
Пробовал. Это никуда не годится. Только для малых объемов работоспособно.

Класс InventUnusedDimCleanUp - похоже, то что надо. По уму сделано.
Только у меня меню называется "Очистка складских аналитик", а не "Очистить не используемые складские аналитики"

Попробовал скрипт на демо базе.

Удалено 700 тыс записей из, почти, 4 млн. Все отработало минут за 15. Супер.
Вся нагрузка на сервере БД происходила...

Последний раз редактировалось someOne; 31.03.2011 в 13:40.
За это сообщение автора поблагодарили: mazzy (5), Zabr (3), Ace of Database (3), Poleax (1), gl00mie (3).
Старый 31.03.2011, 14:05   #8  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,202 / 345 (14) ++++++
Регистрация: 26.06.2002
Адрес: Москва
Цитата:
Сообщение от someOne Посмотреть сообщение
Класс InventUnusedDimCleanUp - похоже, то что надо.
Спасибо. Напрягает в нём только одно - сначала заполняется отдельная таблица всеми существующими InventDimid, причем она совсем не временная, как можно было бы предполагать. А у меня в InventDim >10 млн.записей. И еще это в одной транзакции.

updated: Работало около 1 часа, удалило 18% записей. Ожидал большего, но тоже неплохо.

Последний раз редактировалось Zabr; 31.03.2011 в 15:12.
Старый 01.04.2011, 00:25   #9  
Geo is offline
Geo
Участник
Аватар для Geo
 
258 / 47 (2) +++
Регистрация: 04.04.2008
Цитата:
Сообщение от Zabr Посмотреть сообщение
Спасибо. Напрягает в нём только одно - сначала заполняется отдельная таблица всеми существующими InventDimid, причем она совсем не временная, как можно было бы предполагать. А у меня в InventDim >10 млн.записей.
В книжке прочитал, что временные таблицы размещаются на клиенте. Если это так, то все >10 млн. записей ползали бы по сети, получается.
Старый 01.04.2011, 01:02   #10  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Цитата:
Сообщение от Geo
...временные таблицы размещаются на клиенте...
Неправда. Можно и на сервере создать.
__________________
С уважением,
glibs®
Старый 01.04.2011, 01:02   #11  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,311 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от Geo Посмотреть сообщение
В книжке прочитал, что временные таблицы размещаются на клиенте. Если это так, то все >10 млн. записей ползали бы по сети, получается.
Временные таблицы размещаются там, где была вставлена в них 1-я запись. Т.е. необязательно на клиенте.

Но надо понимать - что временная таблица - суть есть файл на диске, причем на AOS-ном диске (в случае сервера; не говорю уже о клиенте), т.е. который в отличие от СУБД-шного диска (дисков) может быть гораздо менее шустрый. Плюс этот файл существует безо всяких там оптимизаций и обслуживания, которые есть у СУБД. Собственно - поэтому с т.з. производительности лучше создать временную таблицу в СУБД для большого объема данных.
__________________
Возможно сделать все. Вопрос времени

Последний раз редактировалось sukhanchik; 01.04.2011 в 01:04.
Старый 01.04.2011, 05:56   #12  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Zabr Посмотреть сообщение
Первый InventDim проверяет уже 4 минуты. При нашем объеме - это примерно 80 лет чистого времени на проверку всей таблицы. Я не доживу.
э-э-э... рискну спросить.
вы джобик на клиенте запускали или на сервере?
чтобы запустить джобик на сервере, нужно создать menuItem, в нем указать ссылку на джобик и свойство RunOn = Server.

Цитата:
Сообщение от someOne Посмотреть сообщение
Пробовал. Это никуда не годится. Только для малых объемов работоспособно.
Вы ошибаетесь

Цитата:
Сообщение от someOne Посмотреть сообщение
Класс InventUnusedDimCleanUp - похоже, то что надо. По уму сделано.
Только у меня меню называется "Очистка складских аналитик", а не "Очистить не используемые складские аналитики"
Да, спасибо. Пополнил FAQ.

принципиальное отличие класса InventUnusedDimCleanUp от джобика:
= для каждого тестируемого поля в каждой тестируемой таблице класс делает один запрос по всем записям InventDim;
= для каждого тестируемого поля в каждой тестируемой таблице джобик делает запросы по каждому InventDim.

другие отличия скорее технологического характера:
= в классе отдельный connection - круто
= в классе используется более быстрый exist join, а в джобике count

есть и спорные "усовершенствования":
= в классе очень агрессивно делаются четыре skip'а (метод deleteUnusedInventDimIds). Я побоялся вставлять такие skip'ы в публичный ФАК - мало ли что у людей случится. Я думал, что знающие люди догадаются их вставить по месту и в зависимости от того, как у них накастомизировано. А незнающим - отсутствие skip'ов не навредит (а всего лишь замедлит работу).
= класс сейчас невозможно запустить "частями" и параллельно с работой остальных пользователей. Сейчас, в эпоху отсутствия блокировок на чтение это кажется полной фигней. Тогда, когда создавался джобик было важно не блокировать на чтение на слишком долго. Поэтому типичная доработка джобика выглядела так: цикл по InventDim прекращался, если было удалено 10, 20, 50, 100 inventDim'ов. а сам джобик вешался в пакетное задание и выполнял постоянный мониторинг и чистку (обычно вместе с чисткой InventSum(!)). при этом джобик не сильно нагружал систему.

Цитата:
Сообщение от someOne Посмотреть сообщение
Вся нагрузка на сервере БД происходила...
ну, и конечно, джобики по-умолчанию запускаются на клиенте.
чтобы джобик запустился на сервере, его нужно запускать через menuItem

думал, что очевидная вещь. оказывается, ошибался.
Спасибо, дополнил ФАК.
__________________
полезное на axForum, github, vk, coub.
Старый 01.04.2011, 05:58   #13  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Zabr Посмотреть сообщение
updated: Работало около 1 часа, удалило 18% записей. Ожидал большего, но тоже неплохо.
исключите InventSum из проверки.
Там обычно слишком много записей с промежуточными итогами, которые создаются во время работы пользователей над заказами и журналами.

только в этом случае не забудьте почистить inventSum от записей, которые ссылаются на удаленные InventDim.
вопрос изначально был поставлен совершенно корректно
__________________
полезное на axForum, github, vk, coub.
За это сообщение автора поблагодарили: Zabr (3).
Старый 01.04.2011, 06:16   #14  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Временные таблицы размещаются там, где была вставлена в них 1-я запись. Т.е. необязательно на клиенте.
Ага.

Также обратите внимание, что в стандарте и у класса InventUnusedDimCleanUp, и у menuItem свойство RunOn = Called From.
Что в принципе не очень то по феншую... Если уж сделан menuItem, то лучше было бы у menuItem поставить свойство RunOn = Server.
__________________
полезное на axForum, github, vk, coub.
Старый 01.04.2011, 08:39   #15  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,731 / 406 (17) +++++++
Регистрация: 23.03.2006
такой класс лучше запускать в пакете, прекрасно отработает на сервере. почистил где то 25% записей
Старый 01.04.2011, 10:24   #16  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,202 / 345 (14) ++++++
Регистрация: 26.06.2002
Адрес: Москва
Цитата:
Сообщение от Zabr Посмотреть сообщение
Напрягает в нём только одно - сначала заполняется отдельная таблица всеми существующими InventDimid, причем она совсем не временная, как можно было бы предполагать.
Я имел в виду, что постоянная таблица увеличивает объем базы. Например, у меня она пустая занимает 125 Мб. Хотя в принципе это немного.
Старый 01.04.2011, 11:07   #17  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,202 / 345 (14) ++++++
Регистрация: 26.06.2002
Адрес: Москва
Цитата:
Сообщение от mazzy Посмотреть сообщение
исключите InventSum из проверки.
О, точно! Спасибо, так и сделал. Удалилось еще около 750 тыс.записей Inventdim, запускал в пакетном режиме, заняло 25 минут.
Нужно в метод isCandidateInventDimIdTable добавить строчку с InventSum:
X++:
protected boolean isCandidateInventDimIdTable(SysDictTable _sysDictTable)
{
    configurationKeyId  configurationKeyId = _sysDictTable.configurationKeyId();
    tableId             tableId = _sysDictTable.id();
    ;

    // The table should only be evaluated if it has not been marked for deletion, it is
    // not a temporary table and is not InventDim nor InventDimCleanUp
    if (configurationKeyId      == configurationkeynum(SysDeletedObjects40) ||
        configurationKeyId      == configurationkeynum(SysDeletedObjects41) ||
        _sysDictTable.isTmp()    == true                                     ||
        tableId                 == tablenum(InventDim)                       ||
        tableId                 == tablenum(InventSum)                      ||
        tableId                 == tablenum(InventDimCleanUp))
        return false;
    else
        return true;
}
Старый 01.04.2011, 11:19   #18  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Zabr Посмотреть сообщение
Нужно в метод isCandidateInventDimIdTable добавить строчку с InventSum:
ой-ой. будьте осторожны с такими советами
может стоит сформулировать: стоит рассмотреть возможность добавить такую строчку (тогда нужно будет добавить обработку InventSum!!)
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 01.04.2011 в 11:33. Причина: вместе с обработкой InventSum
Старый 01.04.2011, 11:46   #19  
Alexius is offline
Alexius
Участник
Аватар для Alexius
 
461 / 248 (9) ++++++
Регистрация: 13.12.2001
Логичнее кажется первым делом очистить InventSum, а потом InventDim, чтобы не получить битых ссылок, пусть и на малый промежуток времени.
Старый 01.04.2011, 12:48   #20  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Alexius Посмотреть сообщение
Логичнее кажется первым делом очистить InventSum, а потом InventDim, чтобы не получить битых ссылок, пусть и на малый промежуток времени.
Логичнее. а как?

поиск неиспользуемых inventSum сводится к поиску неиспользованных InventDim
Другого способа нет.
__________________
полезное на axForum, github, vk, coub.
Теги
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, время: 00:23.