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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 30.03.2011, 17:44   #1  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,168 / 316 (13) ++++++
Регистрация: 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
 
440 / 231 (8) ++++++
Регистрация: 13.12.2001
Смело нельзя
InventDim необходимо проверить на связи еще по куче табличек
По InventSum не вижу препятствий
За это сообщение автора поблагодарили: Zabr (3).
Старый 30.03.2011, 18:05   #3  
Poleax is offline
Poleax
Модератор
Аватар для Poleax
MCP
Сотрудники компании GMCS
MCBMSS
Злыдни
 
1,353 / 591 (22) +++++++
Регистрация: 17.02.2005
Адрес: msk
Как удалить неиспользуемые 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
Участник
 
58 / 47 (2) +++
Регистрация: 22.10.2007
Можно попробовать Периодической операцией УЗ\Периодические операции\Очистка\Очистить не используемые складские аналитики, не знаю есть ли она в 4-ке, в 5-ке есть.
За это сообщение автора поблагодарили: mazzy (2), Zabr (3), someOne (1).
Старый 30.03.2011, 18:12   #5  
Poleax is offline
Poleax
Модератор
Аватар для Poleax
MCP
Сотрудники компании GMCS
MCBMSS
Злыдни
 
1,353 / 591 (22) +++++++
Регистрация: 17.02.2005
Адрес: msk
Грех не добавить в тему ликну на статью База данных Аксапты быстро растет. Что делать?
Не совсем про 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,168 / 316 (13) ++++++
Регистрация: 26.06.2002
Адрес: Москва
Цитата:
Первый InventDim проверяет уже 4 минуты. При нашем объеме - это примерно 80 лет чистого времени на проверку всей таблицы. Я не доживу.
Старый 31.03.2011, 13:32   #7  
someOne is offline
someOne
Участник
Аватар для someOne
 
171 / 407 (14) +++++++
Регистрация: 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,168 / 316 (13) ++++++
Регистрация: 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 / 906 (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
Moderator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,650 / 2141 (77) +++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от Geo Посмотреть сообщение
В книжке прочитал, что временные таблицы размещаются на клиенте. Если это так, то все >10 млн. записей ползали бы по сети, получается.
Временные таблицы размещаются там, где была вставлена в них 1-я запись. Т.е. необязательно на клиенте.

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

Последний раз редактировалось sukhanchik; 01.04.2011 в 01:04.
Старый 01.04.2011, 05:56   #12  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Most Valuable Professional
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
28,848 / 3764 (183) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Сообщение от 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

думал, что очевидная вещь. оказывается, ошибался.
Спасибо, дополнил ФАК.
__________________
GitHub, Facebook, mazzy.priot, mazzy.music, coub.
Старый 01.04.2011, 05:58   #13  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Most Valuable Professional
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
28,848 / 3764 (183) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Сообщение от Zabr Посмотреть сообщение
updated: Работало около 1 часа, удалило 18% записей. Ожидал большего, но тоже неплохо.
исключите InventSum из проверки.
Там обычно слишком много записей с промежуточными итогами, которые создаются во время работы пользователей над заказами и журналами.

только в этом случае не забудьте почистить inventSum от записей, которые ссылаются на удаленные InventDim.
вопрос изначально был поставлен совершенно корректно
__________________
GitHub, Facebook, mazzy.priot, mazzy.music, coub.
За это сообщение автора поблагодарили: Zabr (3).
Старый 01.04.2011, 06:16   #14  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Most Valuable Professional
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
28,848 / 3764 (183) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Временные таблицы размещаются там, где была вставлена в них 1-я запись. Т.е. необязательно на клиенте.
Ага.

Также обратите внимание, что в стандарте и у класса InventUnusedDimCleanUp, и у menuItem свойство RunOn = Called From.
Что в принципе не очень то по феншую... Если уж сделан menuItem, то лучше было бы у menuItem поставить свойство RunOn = Server.
__________________
GitHub, Facebook, mazzy.priot, mazzy.music, coub.
Старый 01.04.2011, 08:39   #15  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,439 / 318 (13) ++++++
Регистрация: 23.03.2006
такой класс лучше запускать в пакете, прекрасно отработает на сервере. почистил где то 25% записей
Старый 01.04.2011, 10:24   #16  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,168 / 316 (13) ++++++
Регистрация: 26.06.2002
Адрес: Москва
Цитата:
Сообщение от Zabr Посмотреть сообщение
Напрягает в нём только одно - сначала заполняется отдельная таблица всеми существующими InventDimid, причем она совсем не временная, как можно было бы предполагать.
Я имел в виду, что постоянная таблица увеличивает объем базы. Например, у меня она пустая занимает 125 Мб. Хотя в принципе это немного.
Старый 01.04.2011, 11:07   #17  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,168 / 316 (13) ++++++
Регистрация: 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
Administrator
Аватар для mazzy
Most Valuable Professional
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
28,848 / 3764 (183) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Сообщение от Zabr Посмотреть сообщение
Нужно в метод isCandidateInventDimIdTable добавить строчку с InventSum:
ой-ой. будьте осторожны с такими советами
может стоит сформулировать: стоит рассмотреть возможность добавить такую строчку (тогда нужно будет добавить обработку InventSum!!)
__________________
GitHub, Facebook, mazzy.priot, mazzy.music, coub.

Последний раз редактировалось mazzy; 01.04.2011 в 11:33. Причина: вместе с обработкой InventSum
Старый 01.04.2011, 11:46   #19  
Alexius is offline
Alexius
Участник
Аватар для Alexius
 
440 / 231 (8) ++++++
Регистрация: 13.12.2001
Логичнее кажется первым делом очистить InventSum, а потом InventDim, чтобы не получить битых ссылок, пусть и на малый промежуток времени.
Старый 01.04.2011, 12:48   #20  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Most Valuable Professional
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
28,848 / 3764 (183) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Сообщение от Alexius Посмотреть сообщение
Логичнее кажется первым делом очистить InventSum, а потом InventDim, чтобы не получить битых ссылок, пусть и на малый промежуток времени.
Логичнее. а как?

поиск неиспользуемых inventSum сводится к поиску неиспользованных InventDim
Другого способа нет.
__________________
GitHub, Facebook, mazzy.priot, mazzy.music, 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, время: 13:38.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.