Имя: Пароль:
1C
 
Как лучше всего удалять большое количество объектов (порядка 100 000)
0 Gray776
 
31.01.15
10:47
В общем удаляю из БП 1.6 организации, ни естественно все что на них ссылается. Как в фильме "Горец" ))) Должна остаться только одна организация... Пометил вот одну из организаций получил почти 100К помеченных объектов. Штатная удалялка (операции/удаление помеченных объектов) уже на вторые сутки пошла делать проверку чего удаляется чего не удаляется...
Вот и возник вопрос может как то еще можно удалять помеченные объекты но чтоб битых ссылок потом не появлялось...
1 Vladal
 
31.01.15
11:01
(0) Создай новую базу и перетащи в нее объекты выбранной организации.
2 Zhuravlik
 
31.01.15
11:03
(1) +1
(0) Еще можно программно. Поиск ссылок, непосредственное удаление, ТИИ.
3 Vladal
 
31.01.15
11:10
(2) Все равно транзакцию делить.
Что дешевле - перекинуть 20 ты объектов или удалить 100?
4 nordbox
 
31.01.15
11:17
(2) >>Поиск ссылок, непосредственное удаление...
нет гарантии что он удалит именно то что нуно, и битых ссылок потом как конь нагадил будет.
5 Zhuravlik
 
31.01.15
11:39
(4) Для этого есть ТИИ. "нет гарантии что он удалит именно то что нуно" - удалится просто все, кроме записей РС, их уже вручную чистить.
(3) Зависит от уровня знания конфигурации. Если четко знать что переносить - то 20 т. объектов конечно лучше.
С удалением могут быть проблемы, если перепродажи были между организациями, и во что это выльется не могу знать.
По своему опыту: удалял таким образом 79000 объектов (только документы и БП) из базы, было известно что перепродаж никогда не было - все очень хорошо получилось. Удалил, выполнил ТИИ, сбил все последовательности и восстановил их.
6 Gray776
 
31.01.15
11:54
(5) Да там и так последовательностью не пахнет... с самого начала как начали работать в программе... т.е. восстановление последовательности может привести к очень неожиданным результатам
7 nordbox
 
31.01.15
12:05
(6)>>Да там и так последовательностью не пахнет... с самого начала как начали работать в программе...
А имеет ли смысл тогда что то делать с базой???
Перегони справочники и пусть загонят остатки пока еще начало года, вырулить моно если постараться.
8 Zhuravlik
 
31.01.15
12:06
(6) А после удаления 100500 объектов вы на какие результаты рассчитываете?..
9 Zhuravlik
 
31.01.15
12:07
"Перегони справочники " + 1, и в новую бухню. Если конечно рег. отчетность требуется.
10 vde69
 
31.01.15
12:07
создать УРБД, новый узел делать "по организации", потом этот новый узел сделать основной...
11 tesei
 
31.01.15
12:08
(0) рекомендую ПакетноеУдалениеПомеченныхОбъектов v2.3. Я так удалил 150 тыщ объектов. Стандартное удаление не справилось.
12 Zhuravlik
 
31.01.15
12:10
(10) Круто :) Оно все само скопируется? А как думаете - по времени - долго?
13 vde69
 
31.01.15
12:12
за 1.6 не скажу, давно это было, но 2.0 - само все скопируется, на базе в 10 гигов это примерно от 1 до двух часов
14 Zhuravlik
 
31.01.15
12:14
(13) Как-то даже и в голову не приходило посмотреть на УРБД с такой точки зрения, спасибо)
15 nordbox
 
31.01.15
12:14
vde69, зачем такое извращение???
море сякого переноса есть без головной боли.
16 ProxyInspector
 
31.01.15
12:34
В 1с проблема удаления большого количества помеченных на удаление объектов тянется еще со времен 1С77.
Просто алгоритм удаления объектов без ссылок достаточно кривой.
1.Программа находит помеченные на удаление объекты, помещает во временную таблицу.
2.Находит ВСЕ ссылки на помеченные на удаление объекты, помещает во временную таблицу.
3. Делает соединение таблиц и находит Объекты без ссылок.
  Даже для небольшой базы при количестве помеченных на удаление объектов 100 тыс. и количестве не помеченных на удаление объектов 100 тыс. Размер таблицы ссылок может достигать  10 млрд записей. Ни один SQL с такой таблицей не справиться.
  Подобная проблема актуальна как для старой и доброй 1с77, так и для "крутой" 1с83.
17 ProxyInspector
 
31.01.15
12:40
Бороться с этой проблемой можно двумя способами:
1. Удаление объектов, помеченных на удаление порциями по 10 тыс. элементов. Практика показывает, что для удаления 100 тыс элементов без ссылок требуется 4-6 часов.
2. На 8-ке. Поиск элементов без ссылок программно (без построения таблицы ссылок). Удаление этих элементов стандартными методами с контролем ссылок. Для небольшой базы размером 10 гигов. Время удаления составит 30-40 мин
18 nordbox
 
31.01.15
12:42
ProxyInspector выше почитай что он написал...
Зачем ему это геморой, пусть перегоняет справочники в чистую и все.
19 tesei
 
31.01.15
12:45
(17) в (11) можно удалять по кругу хоть по 20 элементов за транзакцию.
20 ProxyInspector
 
31.01.15
12:49
(18) С пергоном справочников могут быть проблемы.
Во первых надо не просто перенести справочники, а обеспечить корректную работу программы после переноса. Для 8-ки, с ее "развитой" объектной моделью. Универсальные обработки  типа сверток и переносов практически не работают. При переносе с вероятностью 99% возникнут проблемы с работой базы.
  Если переносить данные, стандартными для 1с8 механизмами через xml файлы, то для базы размером 10 гигов файл переноса может достигать террабайта. Никто с таким файлом работать не сможет. По этой же причине проблемы могут возникнуть с УРБД
21 Alexor
 
31.01.15
12:51
(0) Просто интересно, а зачем организации удаляете в 1.6?
Базу надо отдать?
22 nordbox
 
31.01.15
12:51
(20) можно подумать у него проблем не будет после удаления
23 ProxyInspector
 
31.01.15
12:53
Поэтому самый простой способ в (11) а самый быстрый в (17.2)
24 ProxyInspector
 
31.01.15
12:55
Для 8-ки проблемы будут в любом случае. Уж больно плохая объектно-ориентированная модель у нее. Очистить данные по организации - это надо немного подумать. А просто удалить объекты без ссылок - проблем нет
25 ProxyInspector
 
31.01.15
13:03
Я здесь делал подобную задачу для 1с77 торговли. База размером 12 Гб, количестве объектов в базе 700 тыс. и количестве объектов для удаления 150 тыс. Количество организаций 24, количество организаций для удаление 5.
Удаление этих организаций в полностью автоматическом режиме заняло порядка 4 часов, на обычном домашнем компе (база на SQL естественно:) Проблем с работой оставшихся организаций не возникло. Все таки 1с77 - это шедевр.
26 Armando
 
31.01.15
13:07
Ну не знаю, у нас в Бухе 2.0 120 тыс объектов проверял часа 3,5.
27 vde69
 
31.01.15
13:15
(21) довольно часто бывает так, холдинг, единая бухгалтерия и тут одно предприятие выходит из холдинга (например его продпли)
28 ProxyInspector
 
31.01.15
13:26
(26) Это у вас проверялось одной порцией?
Бывают разные объекты. Объект для удаления может иметь 1 ссылку а может иметь и 100 тыс. ссылок. К примеру удаление 100 тыс. помеченных на удаление объектов, на которые нет ссылок, штатным методом занимает 10 мин.
29 ProxyInspector
 
31.01.15
13:29
Я ради любопытства написал универсальную обработку, которая ищет элементы без ссылок в любой базе. Так вот она базу Бух2.0  размером 15 гигов перелопачивает за 10 мин.
30 User_Agronom
 
31.01.15
13:57
(0) Удаляй частями
31 Gray776
 
31.01.15
14:31
Смысл есть ждать? ну пока проверка пройдет?
32 alex_zapl
 
31.01.15
15:14
посмотри это http://infostart.ru/public/319611/
возможно поможет
33 Gray776
 
01.02.15
11:02
Итак 2 суток и выдал что удаляется что нет...
34 ProxyInspector
 
01.02.15
12:05
Сегодня столкнулся с подобной проблемой. УТ11. Количество документов 10 штук. Количество номенклатуры 40 тыс. Количество  складских ячеек - 5 тыс. Потребовалось удалить 1.8 тыс элементов, помеченных на удаление.
  Время на удаление где-то 40 мин.
  Эти чудики на букву п., в лице разработчиков конфигурации, модифицировали алгоритм удаления помеченных объектов. Теперь они удаляют порциями по ... 1 элементу.
Они в 1С идиоты что ли? Или прикидываются?
35 mc lammer
 
01.02.15
12:34
(34).
//Эти чудики на букву п., в лице разработчиков конфигурации, модифицировали алгоритм удаления помеченных объектов. Теперь они удаляют порциями по ... 1 элементу.

ага, в БП30  с этим столкнулся, теперь, когда требуется большое количество удалить, открываю базу в режиме обычного приложения.
36 ProxyInspector
 
01.02.15
12:45
Я всегда удаляю в режиме обычного приложения.
Только теперь, то что раньше удалялось за 1 мин, удаляется за час.
  Если разработчики хотят выпендриться, удаляй порциями по КоличествоПомеченныхНаУдалениеОбъектов/100
  Почему разработчики конфигураций из всех алгоритмов выбирают самый тормозной и не удобный для пользователей?
37 ProxyInspector
 
01.02.15
13:01
УТ11 - это шедевр идиотизма. Имеется 40 тыс позиций номенклатуры. 20 складов. Эти разработчики для каждого элемента номенклатуры создали по одному элементу справочника "КлючиАналитикиУчетаНоменклатуры" теперь мне надо удалить 600 тыс элементов этого справочника.
  Если в 77 подобная задача решалась за 30 мин. В 83 мне придется "работать" 3 суток.
38 ProxyInspector
 
01.02.15
13:18
Это прогресс. Удаление 10 тыс. элементов
1с77 - 1 мин
1с82 - 10 мин
1с83 (УФ) - 3 часа.
  Куда катится мир?
39 ProxyInspector
 
01.02.15
16:14
Докладываю.
Мало того, что разработчики конфигураций постарались, так еще и разработчики платформы не подкачали.
  Теперь, если режим совместимости ниже чем 8.3.4, то для процедуры УдалитьОбъекты() требуется монопольный режим. Т.е. если раньше вы могли в разделенном режиме удалять объекты без ссылок партиями, то сейчас вы это сделать не можете. Если вы пытаетесь удалить объекты баз ссылок в фоновом задании, то установить монопольный режим вы не сможете. Остается единственный путь. Который и используется в типовой убработке УдалениеПомеченныхОбъектов
1. Найти все объекты помеченные на удаление. С помощью функции НайтиПомеченныеНаУдаление(). На моей базе это занимает 10 сек.
2. Для каждой ссылки в цикле:
  а. найти элементы, которые ссылаются на нее.
  б.Исключить элементы которые являются владельцами или родителями.
  в.Убедиться, что элементы, которые ссылаются на данный элемент, сами помечены на удаление и могут быть удалены.
  д. После этого командой Спр.Удалить() самому удалить, помеченный на удаление элемент. Неся за это полную ответственность.
  Для каждой ссылки, время анализа примерно 5-10 сек. Т.е. на удаление 10 тыс. элементов потребуется 18 часов.
Это называется капец. На пустой базе жалкие 10 тыс. элементов удалять 18 часов!!!
40 ProxyInspector
 
06.02.15
14:11
Пришлось править типовую обработку по удалению помеченных объектов. Переводим базу в монопольный режим. Удаляем с помощью стандартной функции УдалитьОбъекты с контролем ссылочной целостности порциями по 10 тыс элементов. Вместо 18 часов обработка работает 30 мин.
41 ProxyInspector
 
06.02.15
14:16
Вообще-то можно сделать все это и в не монопольном режиме. Тогда придется реализовать функцию по контролю на наличие ссылок. У меня есть такая функция, просто причесать надо. Тогда время удаления будет занимать минут 10.
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой