|
v8: как програмно удалить много элементов справочника | ☑ | ||
---|---|---|---|---|
0
vde69
25.10.12
✎
15:25
|
имеем справочник с парой лямов элементов, нужно удалить 500 000 записей (отбор по владельцу), как это сделать быстро? (быстро это менее 1 часа)
сейчас например для файловой базы идет вообще около суток, на скуле 6 часов. Интересует какой нибудь хитрый способ реализуемый кодом самой 1с (без всяких удалений метаданных) |
|||
1
hhhh
25.10.12
✎
15:28
|
порциями удалять, разбить на транзакции по 1000 штук.
|
|||
2
1Страх
25.10.12
✎
15:29
|
на скуле delete
|
|||
3
Повелитель
25.10.12
✎
15:29
|
Обмен данными, Загрузка = Истина; убыстрит чуток, а так средствами 1с никак наверно.
Играя с количеством элемнтов в транзакции можно добиться прироста скорости еще. |
|||
4
vde69
25.10.12
✎
15:29
|
(1) это сейчас так и сделано
|
|||
5
acsent
25.10.12
✎
15:30
|
транзакции в 8 никак не ускоряют работу
|
|||
6
almar
25.10.12
✎
15:30
|
(0) А зачем быстро?
|
|||
7
Kashemir
25.10.12
✎
15:31
|
Кроме скулевого удаления ничего такого вроде не придумаешь.
|
|||
8
hhhh
25.10.12
✎
15:32
|
(5) ну когда я удалял, то мне помогло. Есть же разница - 500 транзакций или 500000 транзакций.
|
|||
9
Kashemir
25.10.12
✎
15:33
|
+(7) Если нет табличных частей и реквизитов неограниченной длины.
|
|||
10
Liova
25.10.12
✎
15:33
|
А что, такое часто надо делать? Или удалять не всё сразу не вариант?
При удалении ещё и записи в РС с ведущими измерениями делаются. |
|||
11
Повелитель
25.10.12
✎
15:33
|
(8) Помню на 7-ке такое прокатывало, производительность в несколько раз вырастала ))
А вот на 8, если 10-20% выйгрываю этими манипуляциями то рад )) |
|||
12
Kashemir
25.10.12
✎
15:34
|
(10) Да вроде автор не озадачивается проблемой контроля ссылочной целостности
|
|||
13
hhhh
25.10.12
✎
15:35
|
для файловой лучше в терминале удалять, чтобы прямо на сервере, без сети.
|
|||
14
Kashemir
25.10.12
✎
15:36
|
+(13) и в привилегированном модуле, дабы всякие рлсы не трогать
|
|||
15
МихаилМ
25.10.12
✎
15:36
|
используйте фоновые задания.
причем кол-во фоновых мб в 2-3 раза больше, чеи доступных процессеров(ядер.) |
|||
16
Reset
25.10.12
✎
15:36
|
Журнал регистрации отключить на время удаления (хотя это копейки наверное)
|
|||
17
Liova
25.10.12
✎
15:37
|
(12) Я вообще к тому, что надо смотреть не только на сам справочник. но и как пишется в РС записи, и что по подписке делается.
Например, может есть подписка для плана обмена, тогда (3) может сильно помочь. (15) + 1 имел ввиду когда спрашивал (10) |
|||
18
Pro-tone
25.10.12
✎
15:38
|
||||
19
nv24
25.10.12
✎
15:59
|
хороший вопрос
|
|||
20
vde69
25.10.12
✎
16:21
|
вроде заработало нормально, как я понял раньше тормозило на поиске "деток" (по родителям), после установки загрузки стало на порядок быстрее.
Функция ОчиститьДампБлоковФайла(Файл, ОсталосьБлоков, ВсегоБлоков) Экспорт Результат = Истина; УстановитьПривилегированныйРежим(Истина); КоличествоБлоков = 1000; // очищаем старые значения // наверно более оптимально будет использовать старые, // но это в преспективе Запрос = Новый Запрос( "ВЫБРАТЬ РАЗЛИЧНЫЕ | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Блоки.Ссылка) КАК Ссылка |ИЗ | Справочник.Блоки КАК Блоки |ГДЕ | Блоки.Владелец = &Владелец "); Запрос.УстановитьПараметр("Владелец", Файл); мТЗ = Запрос.Выполнить().Выгрузить(); ОсталосьБлоков = мТЗ.Итог("Ссылка"); ВсегоБлоков = Макс(ВсегоБлоков, ОсталосьБлоков); Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ " + Формат(КоличествоБлоков, "ЧГ=0") + " | Блоки.Ссылка |ИЗ | Справочник.Блоки КАК Блоки |ГДЕ | Блоки.Владелец = &Владелец "; Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Количество() >= КоличествоБлоков Тогда Результат = Ложь; КонецЕсли; НачатьТранзакцию(); Пока Выборка.Следующий() Цикл оОбьект = Выборка.Ссылка.ПолучитьОбъект(); оОбьект.ОбменДанными.Загрузка = Истина; оОбьект.Удалить(); КонецЦикла; ЗафиксироватьТранзакцию(); УстановитьПривилегированныйРежим(Истина); Возврат Результат; КонецФункции |
|||
21
ilya_i
25.10.12
✎
17:16
|
Возможно удаление каких-нибудь индексов ускорило бы, но не уверен ...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |