23.12.2011, 13:10 | #41 |
Участник
|
Цитата:
Сообщение от Vadik
Может кто-то поделиться статистикой - какие аналитики используются и как, количество записей в InventDim до и после, общие впечатления (по возможности - объективные) ? Просто не очень понятно, что там такого можно понавычистить и что от этого улучшится
P.S. что можно поломать, случайно вычистив не то что надо, я в общих чертах представляю Строки заказа на покупку создаются, потом удаляются - а записи в InventDim остаются. Текущий размер таблицы InventDim >11 млн.записей. Последний раз редактировалось Zabr; 23.12.2011 в 13:12. |
|
23.12.2011, 13:11 | #42 |
Участник
|
А сильно помогли эти 20 % ?
|
|
23.12.2011, 13:18 | #43 |
Участник
|
Не знаю. Надо было замерять какие-то запросы до и после, я этого не делал. Но по отдельным складам число InventDim сократилось более чем вдвое, так что думаю это сказалось на производительности всех тех запросов, где джойнится InventDim с условием по конкретному складу.
|
|
23.12.2011, 13:42 | #44 |
Участник
|
Цитата:
Денормализацию не пробовали ? |
|
25.07.2012, 11:57 | #45 |
Участник
|
Тоже возникла заинтересованность в удалении лишних 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 |
----------------
|
а слабо джобик в аксе написать, который пробежит по всем табличкам, где есть данные и поля с ссылкой на InventDim и сгенерит по ним такой скрипт?
|
|
25.07.2012, 17:37 | #47 |
Злыдни
|
Я бы поостерегся удалять таким образом: достаточно в справочнике номенклатур внести одну услугу и InventSum уже не будет работать.
__________________
люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании. |
|
25.07.2012, 18:27 | #48 |
Участник
|
Ace of Database
Таблицы, хранящие интегральные (суммовые) показатели не могут служить критерием "использования" складской аналитики. В данном случае имею в виду InventSum Другими словами, наличие записи в таблице складских остатков не может являться "оправданием" факта существования складской аналитики. Должна быть ссылка на складскую аналитику где-то еще. Как следствие, в приведенном SQL-запросе exists(... from InventSum ...) - лишний. Если складской аналитики нет больше нигде, кроме как в складских остатках, то такую аналитику тоже надо удалить! Соответственно, следующий логичный шаг - второй запрос, который удаляет записи складских остатков, если они ссылаются на не существующую (возможно, удаленную на первом шаге) складскую аналитику.
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
25.07.2012, 18:30 | #49 |
Участник
|
Так написано уже И даже не джобик а полноценный класс. Мой проект на предыдущей закладке. Там для 2.5 вообще-то, но отличия от исходного скрипта незначительные. В основном по правам доступа.
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
24.01.2018, 13:10 | #50 |
Участник
|
Тоже недавно понадобилось почистить неиспользуемые 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); Поставил еще одну заплаточку: 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++: select count(RecId) from inventDimCleanUp exists join common where inventDimCleanUp.InventDimId == common.(fieldId); Код: 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 |
Участник
|
Вы DataAreaId учитываете?
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
|
За это сообщение автора поблагодарили: БАХ43 (1). |
24.01.2018, 14:35 | #52 |
Участник
|
Я ждал этого вопроса. Нет, не учитываю. И в X++, и в SQL. Дело в том, что раньше база обслуживала несколько компаний, так что некоторые таблицы в виртуальных компаниях. Теперь реальная компания одна. Как раз и хотел почистить весь мусор оставшийся с прошлых лет.
|
|
24.01.2018, 14:59 | #53 |
Участник
|
Точно, туплю. В WMSOrder оказались еще данные из виртуальной компании, неприсоединенной к нашей. А запрос X++ выполняется в пределах выбранных виртуальных компаний.
|
|
19.12.2019, 16:45 | #54 |
Участник
|
Хочу поставить класс InventUnusedDimCleanUp для AX4.0, но увидел что есть обращение к таблице InventDimCleanUp. Нет в нашей AX такой таблицы. Что это за таблица? Очень нужно почистить InventDim c InventSum.
Последний раз редактировалось Dobral; 19.12.2019 в 17:08. |
|
19.12.2019, 17:09 | #55 |
Участник
|
Таблица, содержащая одно поле InventDimId
__________________
Я прибыл к вам из Кантемировской дивизии. А там, как известно, дураков не держат! |
|
Теги |
inventdim, inventsum, складская аналитика, удаление |
|
|