Имя: Пароль:
1C
1С v8
Как быстро удалить 500000 документов?
,
0 Азат
 
20.09.20
17:12
Собственно, суть

Дано - компьютер типа i3/4Gb/120Gb SSD
Файловая база 1С8, одного из видов документов примерно 600000-700000 штук (довольно простой документ, нет никаких движений по регистрам, просто документ).
Для ускорения нужно удалить примерно 500 - 550 тысяч штук.
Проблема в том, что компьютер работает 24 * 365 и остановить его больше, чем на 40-60 минут, нереально.

Собственно, какие могут быть идеи?
Сейчас думаю над:
1) Удаление в транзакции по 1000 штук
2) Выгрузить в файл последние тысяч 50 штук, удалить документ из конфы, сжать конфу, вернуть документ в конфу и загрузить 50 тысяч доков.

Что еще можете предложить?
Спасибо!
1 Aleksey
 
20.09.20
17:13
удляешь как? Если простой документ то без контроля ссылочной целостности должно быть быстро
2 Andreyyy
 
20.09.20
17:14
(0) Зачем останавливать компьютер (работу) ?
Удаляйте не торопясь ... чтобы без блокировок.
3 Азат
 
20.09.20
17:16
(1) Выборка из запроса и дальше - ПолучитьОБъект().Удалить() и все
(2) нельзя. Новый документ вводится каждые максимум 5-10 минут
4 Азат
 
20.09.20
17:17
+ (0) есть еще вариант - стянуть базу на более быстрый ПК, сделать так и вернуть обратно.
5 Провинциальный 1сник
 
20.09.20
17:20
(0) "Файловая база" ... "компьютер работает 24 * 365 " - это феерично вообще.
6 Азат
 
20.09.20
17:21
(0) завидуем молча
7 Азат
 
20.09.20
17:22
(6) к (5)
8 johnnik
 
20.09.20
17:23
Для базы такого размера и в такой режиме работы (24х365) комп неплохо бы побыстрее иметь. i5-9400/16Gb/SSD M.2 NVMe настоятельно рекомендую
9 Конструктор1С
 
20.09.20
17:26
(0) "Для ускорения нужно удалить примерно 500 - 550 тысяч штук"

А почему ты думаешь, что удаление что-то ускорит?
10 Обработка
 
20.09.20
17:27
(0)
1. Выгрузи базу и разверни на более быстром компе.
2. На том компе пусть люди работаю без остановки.
3. Но им строго на строго скажи чтоб пока не вводить и редактировать доки прошлого периода максимум сегодня вчера и все.
4. Удали доки в копии.
5. Перенеси через универсальную обработку доки за 2 дня с актуальной базы.
6. Сделай сверку данных.
7 Замени актуальную базу.
Профит!
11 Азат
 
20.09.20
17:28
(8) зачем?
(9) потому что тормоза возникают только при работе с этой таблицей
(10) как вариант. Люди работают с доками максимум на 8 часов назад
12 Обработка
 
20.09.20
17:30
(9) Как бы мы не говорили но 1С остается системой который зависимость скорости работы от объема данных есть.
Но конечно ему ()Автору бы начать с железа и с переводом в скуль. Но как всегда 1Сник решает все не стой строны.)))
13 Азат
 
20.09.20
17:33
(12) в каждом киоске ставить sql? а вы знаете толк в извращениях
14 Обработка
 
20.09.20
17:34
Я вот большие базы сворачивают так.

1. Запускаю свертку но только ввод остатков.
2. Переношу данные в чистую базу с даты свертки.
Экономлю иногда время несколько сутками. Вместо 2-3 дней трачу всего лишь 2-3 часа.
15 Обработка
 
20.09.20
17:36
(13) В киоска должна стоять розница которая сворачивается раз в пол года или в год ну или в два года.
Киоск или не киоск важно объемы данных! И их безопасность.
16 Обработка
 
20.09.20
17:37
+(15) Что за киоск очень интересно? И что за база (конфа)? И какой объем базы файловой?
17 Азат
 
20.09.20
17:44
(15) а можно показать закон о киосках, где написано, что "должна стоять розница"?
(16) обычный киоск, который не закрывается никогда
18 hhhh
 
20.09.20
17:44
(13) ну если тормоза с этой таблицей, значит там говнокод где-то. Вам нужно просто проанализировать работу с этой таблицей, переписать запросы, зачем всё удалять?
19 Азат
 
20.09.20
17:46
(18) вопрос в том, что тупо "Выбрать Сумма(СуммаДокумента) Из Документ.ИмяДокумента Где Дата > Вчера" долговато выполняется
20 Азат
 
20.09.20
17:46
+(19) и замечено, что пограничная цифра - это 500 000 документов.
21 Обработка
 
20.09.20
17:47
(17) Закона нет. Это просто практично и логично.
Я так понял у вас в киоске стоит КА2 или ЕРП. Ну тогда удачи.
Обычно в Киосках Розница   или УТ в РИБе. И второе из них очень редко.
22 Immortal
 
20.09.20
17:48
(0) выгрузить базу в dt
загрузить базу в ms sql
truncate table
выгрузить базу
загрузить базу
23 Азат
 
20.09.20
17:51
(21) а где это было написано? нет, стоит самописка, которую я нарисовал, посмотрев несколько конф для розницы, в т.ч. розницу 1.0, решение от бита и тп
В конфе, грубо говоря, 4 справочника, 2 документа и все
24 ДенисЧ
 
20.09.20
17:53
настроить риб, в рибе потихоньку удалять, почаще делать обмены
25 Обработка
 
20.09.20
17:54
(20) Кстати из своего личного опыта.
У меня есть Сеть Аптек у одного хозяина.
У него 5-6 аптек из них половина работает круглосуточно. Почти как у тебя.
Там у них стоит самописная моя конфа.
Раз в два года я им их делаю свертку.
При этом они работают без остановки.
Я делаю из ЦБ-копии свертку отпочковываю  все 5-6 ПБ новые базы.
Потом как я уже выше сказал переношу данные за день в каждой аптеке.
Итог ни одна из аптека не останавливается больше чем на 10-15 минут.
Свертку делаю не спеша проверяя все данные дома. У всех профит.
26 Обработка
 
20.09.20
17:56
+ (25) Получатся у нас одинаково все почти.
У них обычные компы даже SSD нет.
Как раз когда начинаются жаловаться что тормоза начались произвожу свертку по выше указанной схеме.
27 Конструктор1С
 
20.09.20
18:12
(11) тормоза могут возникать по массе причин
(19) такой запрос легко оптимизировать
28 Гость из Мариуполя
 
гуру
20.09.20
19:25
(0) на инфостарте где-то видел удаление помеченных на удаление объектов фоновым заданием в немонопольном режиме.
29 Гость из Мариуполя
 
гуру
20.09.20
19:34
собственно, вот
http://catalog.mista.ru/1c/articles/196449/

Маленький вопросик только в том, что надо ли помечать на удаление сразу 500000? целесообразно ли?
Слона можно ведь сожрать и по кусочкам, тем более тебе не горит, никто взашей не толкает.
Помечай кусочками, запускай фоновое по ночам под утро в самый волчий час - и за недельку все вычистится без напряга и незаметно для юзеров.
Но это чисто мое имхо...
30 Азат
 
20.09.20
21:49
(29) киосков много, если каждый делать по нескольку ночей, могу задолбаться. А так основная идея - сделать и забыть на два года
31 Гость из Мариуполя
 
гуру
21.09.20
14:47
(30) ну.., если ручками по ночам делать, то наверно можешь и задолбаться. Даже наверняка задолбаешься :)
а если фоновые задания.. настроить расписания..
первое фоновое задание - помечать на удаление эти документы, скажем, старше полугода (/месяца, квартала, года / нужное подчеркнуть).
второе фоновое задание - удалять эти помеченные документы.
и тогда забыть можно не на два года, а наверно навсегда.
32 lodger
 
21.09.20
14:54
(31) главное при этом - не пытаться пометить и удалить сразу всё.
работать надо порциями.

выбрать и уничтожить первые N штук среди помеченных на удаление.
повторять раз в 5 минут, пока есть что уничтожить, неуничтожимое класть в РС-фильтр, чтобы (0) было что поделать на выходных и отфильтровать из выборок.
если выбрать и уничтожить вернуло 0, тогда выполнять второй метод:
выбрать первые N штук и пометить на удаление.
33 ChMikle
 
21.09.20
14:55
(0) Ели есть возможность выгрузить в SQL и оттуда уже запросами удалить
34 Garykom
 
гуру
21.09.20
15:06
(0) >2) Выгрузить в файл последние тысяч 50 штук, удалить документ из конфы, сжать конфу, вернуть документ в конфу и загрузить 50 тысяч доков.

Документ скопируй в конфигураторе, перенеси туда 50 штук нужных далее сам понимаешь
35 Garykom
 
гуру
21.09.20
15:07
(34)+ Причем если есть ссылки на этот вид документа то можно и их сохранить.
36 GANR
 
21.09.20
15:10
Если ничего на документ не ссылается, то ДТ-шник в PostgreSQL и truncate table к основной таблице документа и табличным частям, в (22) примерно это советуют. Отработает мгновенно. (0) Почему не хочешь так сделать?
37 Eiffil123
 
21.09.20
15:17
(0) отключить итоги, удалить записи из регистров. Далее в транзакции можно по 5тыс удалять, можно по 1000 обработкой без контроля целостности. Быстрее штатными средствами не получится.
38 ptiz
 
21.09.20
15:17
(30) Всё равно непонятно, к чему спешка. Настроил планировщик в винде, или фоновое - само будет чиститься.
39 MyNick
 
21.09.20
15:24
(0)
Идеи в том, что
1. 600 тыс документов это не много. Если тормозят запросы, накидывай индексы на поля, участвующие в основных отборах и соединениях.
2. Не понятно, в чем проблема запустить автообработку, которая потихоньку будет эти документы удалять (правда потом сжатие таблиц потребуется и переиндексирование)
40 1CnikPetya
 
21.09.20
15:39
(19) Хм. Кажется, 1С для таких ситуаций что-то придумала в свое время. О, регистры накопления :)
41 Азат
 
21.09.20
16:36
(22), (33) да, спасибо, так и сделаю - подготовил виртуалку, туда буду переносить по одной
42 Азат
 
21.09.20
16:39
всем спасибо, тему можно закрывать :)