УТ 11.5 дубликаты ключей аналитики номенклатуры

1. serg_art 18 29.05.24 15:08 Сейчас в теме
Всем доброго дня!
Подскажите, как можно решить такую проблему.
Есть старая база УТ, в ней ключей аналитики учёта номенклатуры порядка 14млн записей, из них почти все 14 это дубликаты.
Делаю стандартную обработку через форму - удаление дублей, она помечает их на удаление.
Но само удаление такого количества происходит очень долго 1000 в минуту, причём на сервере 2xGold5111 300Гб оперативки, пробовал и файловый и серверный вариант.
Может есть какая-то хитрость, как обработать эти дубли быстрее?
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 76 29.05.24 15:16 Сейчас в теме
(1)выполнить удаление прямым запросом не предлагать?
3. serg_art 18 29.05.24 15:23 Сейчас в теме
(2) ага, на часть из этих дубликатов есть ссылки, если только в запросе как-то учесть это
6. nomad_irk 76 29.05.24 15:25 Сейчас в теме
(3)почистить ссылки обработкой, это ж можно сделать явно быстрее, чем удалить 14М типовым способом
7. laperuz 46 29.05.24 15:27 Сейчас в теме
(3)Так поиск и удаление дублей же перекидывает ссылки на один элемент, а второй помечает на удаление, откуда ссылки на удаленные?
8. serg_art 18 29.05.24 15:30 Сейчас в теме
(7) не, поиск и удаление дублей из администрирования даёт ошибку - слишком много дубликатов.
я про типовую обработку из формы ключи аналитики - заменить дубли ключей аналитики.
4. karamazoff 112 29.05.24 15:23 Сейчас в теме
запустить на ночь, две, три и потерпеть, по описанию, база та еще, еще с ней нахлебаетесь, хитростями, увы, не обойдемся
5. serg_art 18 29.05.24 15:25 Сейчас в теме
(4) да, моё любимое - 23 релиза для обновление, с дописанным функционалом прямо в конфигурацию ))
9. karamazoff 112 29.05.24 15:30 Сейчас в теме
(5)не фига не понял, где тут про обновление конфы?
если умеете писать запросы sql - postgres , делается на щелчок, я с отбором не умею, могу только полностью очистить нужную таблицу
10. serg_art 18 29.05.24 15:34 Сейчас в теме
(9) чтобы обновить, надо почистить ключи, без этого типовая обработка по каждому ключу создаёт запись в регистре и там уже время кратно возрастает.
delete from я так-то тоже могу, мне б с контролем целостности
11. karamazoff 112 29.05.24 15:41 Сейчас в теме
(10)ну хоть база на сервере, выяснили. Как вариант, анализ того чего надо удалить, потом непосредственное удаление объектов обработкой, потом тис с удалением не найденных ссылок, и конечно перед этим архив. Я бы так попробовал
12. laperuz 46 29.05.24 15:47 Сейчас в теме +1 $m
Есть хитрый способ, но нужны навыки работы со строками и файлами, на любом языке

В типовых есть выгрузка в дамп для загрузки в облако.
Дамп это zip архив с кучей xml

Одна XML содержит один тип метаданных.
Находим XML с ключами аналитики, парсим его, проверяем пометку удаления и гуид. Гуид ищем во всех оставшихся файлах дампа, если нашли - значит ссылки есть.

То, что нужно удалить - прямо вырезаем из XML. Если нужно заменить ссылку - меняем гуид простой заменой подстроки.

Потом скорректированный дамп загружаем обратно и радуемся.

На каком-нибудь питоне будет прям быстро. 1С, кстати, тоже довольно достойно работает по скорости, если работать с XML как со строкой.

P.S. делал подобное лично, мне понравилось, но потребуется немного поразбираться в структуре дампов.
o.kovalev; +1 Ответить
13. karamazoff 112 29.05.24 15:50 Сейчас в теме
(12)Вы к нам с какой планеты? Тут прямая работа с метаданными
16. laperuz 46 29.05.24 15:58 Сейчас в теме
(13) что там, порядка 10-12 дней получится у ТС при заявленных параметрах?

Прямыми запросами будет быстрее, конечно, но будут проблемы с контролем целостности и заменой ссылок

Способ через дамп сработает за несколько минут, особенно если заранее составить пары гуидов для замены
18. karamazoff 112 29.05.24 16:02 Сейчас в теме
(16)Дружище, ну мы как могли, попытались, може конечно придет гуру и вобьет гвоздь...
14. serg_art 18 29.05.24 15:52 Сейчас в теме
(12) это реально звучит круто! но какой будет размер дампа для 14 млн записей я даже не представляю
15. karamazoff 112 29.05.24 15:54 Сейчас в теме
(14)Ну дык, проще нанять 10 тыс секретарш
17. laperuz 46 29.05.24 16:02 Сейчас в теме
(14)я обрабатывал подобным образом дампы в 10 запаковынных Гигабайт (они же порядка 150 распакованных), на 1Се. Не помню, чтобы весь процесс(с программной распаковкой/запаковкой дампа обратно) занимал больше пары часов.
На более быстрых языках сработает ещё быстрее, в этом плюс этого способа, что можно хоть на C алгоритм написать)
20. nomad_irk 76 29.05.24 16:08 Сейчас в теме
(17)это ж нужно х3 объема на диске, чтобы обработать.
21. laperuz 46 29.05.24 16:12 Сейчас в теме
(20)Согласен, места на диске должно быть много.
Ну и сама выгрузка/загрузка дампа какое-то время занимает, естественно
28. o.kovalev 116 30.05.24 10:38 Сейчас в теме
(12) Тоже достойный способ, вполне рабочий !
19. Spurk 42 29.05.24 16:04 Сейчас в теме
Если есть чем удалять (наверное что то по типу обработки "Поиск и замена значений"), то удалять нужно через несколько потоков. Отбираете несколько пачек, например по 20 000 ссылок и запускаете несколько фоновых заданий. Например 5 штук. Нужно будет только скорость протестировать. Но вроде как работать именно с большими блоками информации надо именно так. Скорость будет примерно как в одном потоке, может чуть дольше.
22. serg_art 18 29.05.24 16:30 Сейчас в теме
(19) да, нужно что-то типа многопоточного удаления справочников, тут нашёл только по документам и то по части
23. Spurk 42 29.05.24 16:43 Сейчас в теме
(22) А что через ОбъектУдалить() не работает?
Пройдись и пометь на удаление все элементы. Точно так же, через фоновые задания.
Потом переработай написанный код под непосредственно удаление.
Оберни в попытку само удаление.
Запусти.
Там где ссылок на другие объекты нет, сразу удалит. С остальными работай через что-нибудь по типу найтиСсылки(). После того как удалишь без ссылок.
24. Marketer 30.05.24 09:22 Сейчас в теме
Вариантов быстрее по сути нет. Ускоряйте сервер или железо, будет счастье:))
27. o.kovalev 116 30.05.24 10:36 Сейчас в теме
(24) Есть вариант заменить ссылки напрямую на SQL, в таблицах в которых наибольшее число ссылок, затем пере-индексировать базу, и завершить процесс обычной обработкой замена значений, но риск испортить базу очень большой. Одно неловкое движение и все.
25. muskul 30.05.24 09:42 Сейчас в теме
Сделайте новую базу)
зы. для 1с проц с частотой 3.2 (и то не факт что там фикс такой стоит) то еще гавно
26. o.kovalev 116 30.05.24 09:48 Сейчас в теме
Заменить обработкой "Замена значений" дубли на рабочие ссылки и затем удалить, другого варианта нет.
процесс может быть не быстрым.
29. singl1966 19.06.24 04:55 Сейчас в теме
Создать новую аналогиную базу и залить туда все даижения через xml обмен. Ключи аналитики загрузяттся только пктуальеык и удалять не прийдется ничего
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот