|   |   | 
| 
 | Возможно ли ускорить удаление записей регистра? | ☑ | ||
|---|---|---|---|---|
| 0
    
        bodri 02.06.15✎ 11:44 | 
        Возможно ли ускорить удаление записей регистра?
 Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Типовой.Регистратор КАК Регистратор, | Типовой.Сумма КАК Сумма |ИЗ | РегистрБухгалтерии.Типовой КАК Типовой |ГДЕ | Типовой.Период <= &Дата | |УПОРЯДОЧИТЬ ПО | Типовой.Период |ИТОГИ | СУММА(Сумма) |ПО | Регистратор"; Запрос.УстановитьПараметр("Дата",Дата); Результат = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока Результат.Следующий() Цикл Операция = РегистрыБухгалтерии.Типовой.СоздатьНаборЗаписей(); Операция.Отбор.Регистратор.Установить(Результат.Регистратор); Операция.Прочитать(); Если Не Операция.Количество() = 0 Тогда Операция.Очистить(); Операция.Записать(); КонецЕсли; КонецЦикла; | |||
| 1
    
        ДенисЧ 02.06.15✎ 11:45 | 
        Не надо Операция.Прочитать()     | |||
| 2
    
        pessok 02.06.15✎ 11:45 | 
        итоги в заросе не нужны, сумма в запросе не нужна, набор не нужно читать и очищать перед записью     | |||
| 3
    
        Волшебник модератор 02.06.15✎ 11:46 | 
        убери  Операция.Прочитать();     | |||
| 4
    
        bodri 02.06.15✎ 11:47 | 
        (2) итоги нужны, выводится еще табличка.     | |||
| 5
    
        1Сергей 02.06.15✎ 11:47 | 
        перенеси до цикла строку
 Операция = РегистрыБухгалтерии.Типовой.СоздатьНаборЗаписей(); ускорит на 0,000000000001% | |||
| 6
    
        Волшебник модератор 02.06.15✎ 11:48 | 
        Можно создать новый регистр бухгалтерии и перенести в него записи >&Дата
 Старый регистр переименовать в Удалить_ | |||
| 7
    
        Ненавижу 1С гуру 02.06.15✎ 11:48 | 
        Пока Результат.Следующий() Цикл
 Операция = РегистрыБухгалтерии.Типовой.СоздатьНаборЗаписей(); Операция.Отбор.Регистратор.Установить(Результат.Регистратор); Операция.Записать(); КонецЦикла; | |||
| 8
    
        pessok 02.06.15✎ 11:49 | 
        (4) в цикле я этого не вижу     | |||
| 9
    
        Волшебник модератор 02.06.15✎ 11:49 | 
        Запускать надо на 1С-сервере или так, чтобы между клиентом и сервером была гигабитная сетка.     | |||
| 10
    
        bodri 02.06.15✎ 11:49 | 
        (6) не так не пойдет, в базе 8 лет работы, а удалить надо первый год.     | |||
| 11
    
        pessok 02.06.15✎ 11:50 | 
        (10) это была шутка, мне кажется :)     | |||
| 12
    
        bodri 02.06.15✎ 11:50 | 
        (8) не буду же я всю процедурину суда впихивать     | |||
| 13
    
        Волшебник модератор 02.06.15✎ 11:51 | 
        (11) Зависит от объёма данных и как его разделяет дата. Например, если надо удалить 8 лет работы и оставить последний год, то вполне имеет смысл создать новый регистр или новую базу     | |||
| 14
    
        bodri 02.06.15✎ 11:52 | 
        (13) согласен     | |||
| 15
    
        Волшебник модератор 02.06.15✎ 11:53 | 
        (10) Кстати, остатки изменятся. Это предусмотрели?     | |||
| 16
    
        pessok 02.06.15✎ 11:53 | 
        (13) я бы все же снял активность с движений, дабы "не протерять", с другой стороны, в отдельном регистре они тоже не пропадут     | |||
| 17
    
        bodri 02.06.15✎ 11:53 | 
        (15) да     | |||
| 18
    
        bodri 02.06.15✎ 12:00 | 
        странно (7) работает медленней чем (0)
 в (7) 112 записей в минуту, а в (0) 95 записей в минуту | |||
| 19
    
        bodri 02.06.15✎ 12:01 | 
        (18) наоборот в (7) 95 записей в минуту, а (0) - 112     | |||
| 21
    
        pessok 02.06.15✎ 12:05 | 
        высказывание_Станиславского.txt     | |||
| 22
    
        bolobol 02.06.15✎ 12:07 | 
        (19) Да, оптимизация - она такая...     | |||
| 23
    
        pessok 02.06.15✎ 12:13 | 
        (0) давай замеры, надо смотреть где оно тупит     | |||
| 24
    
        Гёдза 02.06.15✎ 12:14 | 
        если массово, то отключить итоги, удалить в режиме обмен данными, потом пересчитать итоги     | |||
| 25
    
        Гёдза 02.06.15✎ 12:15 | 
        или удалять даже в чистом скл     | |||
| 26
    
        Гёдза 02.06.15✎ 12:16 | 
        у меня где-то была такая обработка свертки. но только для регистров накопления     | |||
| 27
    
        pessok 02.06.15✎ 12:17 | 
        кстати да, отключение итогов точно позволит ускорить обработку. ОбмегДанными.Загрузка - тут уже надо смотреть что там в самом модуле набора данных, может быть и не нужно     | |||
| 28
    
        bodri 02.06.15✎ 12:18 | 
        (23) Операция.Записать(); 
 по (0) на 106 обращений 46,6 сек по (7) на 101 обращений 50,5 сек | |||
| 29
    
        bolobol 02.06.15✎ 12:18 | 
        (23) Отсутствие проверки на необходимость записи:
 Если Не Операция.Количество() = 0 Тогда Операция.Очистить(); Операция.Записать(); КонецЕсли; - вызывает запись даже тогда, когда она не требуется. Вопрос лишь в том - зачем отбирать регистраторы, по которым очищать нечего | |||
| 30
    
        pessok 02.06.15✎ 12:20 | 
        (29) все дело в том, что в это условие входа тупо не будет, посему оно лишнее. Запрос же строится по регистру, значит по регистратору движения есть     | |||
| 31
    
        bodri 02.06.15✎ 12:22 | 
        (30) верно     | |||
| 32
    
        bolobol 02.06.15✎ 12:22 | 
        (30) глянь в (28) - 101 раз, вместо 106     | |||
| 33
    
        bodri 02.06.15✎ 12:23 | 
        46,6/106 = 0,44
 50,5/101 = 0,5 | |||
| 34
    
        bodri 02.06.15✎ 12:23 | 
        (33) к (32) и + замер делался за минуту     | |||
| 35
    
        pessok 02.06.15✎ 12:25 | 
        (31) дык это не показатель, записи все равно обрабатываются одни и те же, просто, почему-то, после чтения и очистки удаляется веселее... Платформа...     | |||
| 36
    
        bolobol 02.06.15✎ 12:25 | 
        (34) Если разный набор удаляется - тогда и сравнивать нечего.     | |||
| 37
    
        vogenut 02.06.15✎ 12:27 | 
        НачатьТранзакцию();
 Пока Результат.Следующий() Цикл Операция = РегистрыБухгалтерии.Типовой.СоздатьНаборЗаписей(); Операция.Отбор.Регистратор.Установить(Результат.Регистратор); Операция.Записать(); КонецЦикла; ЗафиксироватьТранзакцию(); | |||
| 38
    
        pessok 02.06.15✎ 12:28 | 
        +(37) как вариант может взлететь, а если еще и в начале транзакции отрубить итоги, то вообще может получиться хорошо. Грустнее, что это все гадание на кофейной гуще     | |||
| 39
    
        z80a 02.06.15✎ 12:28 | 
        (0) При чистке записей регистра нужно отключить пересчет итогов:
 УстановитьИспользованиеИтогов(Ложь); чистка УстановитьИспользованиеИтогов(Истина); | |||
| 40
    
        vogenut 02.06.15✎ 12:30 | 
        (38) Если очищается большая часть регистра, то можно отключить итоги. Транзакция всегда даст выигрыш.     | |||
| 41
    
        Волшебник модератор 02.06.15✎ 12:30 | 
        Надо посмотреть модуль набора регистра, какие там проверки при записи и отключить их по условию ПараметрСеанса.ГрупповоеИзменениеОбъектов или ОбменДанными.Загрузка = Истина     | |||
| 42
    
        pessok 02.06.15✎ 12:31 | 
        (40) все были уверены, что непрочитывание набора тоже даст выигрышь, ан нет     | |||
| 43
    
        ЧеловекДуши 02.06.15✎ 12:32 | 
        (42) Ты тест проводишь при удалении одних и тех же данных.
 Или попросту 100 первых попавшихся? 100 тогда, не будут 100 в следующем ;) | |||
| 44
    
        pessok 02.06.15✎ 12:33 | 
        (43) я ничего не провожу, я только высказываю мнение, что может помочь автору, а потом буду использовать это у себя :)     | |||
| 45
    
        bodri 02.06.15✎ 12:37 | 
        (43) специально развернул 2 базы для проверки, поэтому по идее условия одинаковы     | |||
| 46
    
        Fragster гуру 02.06.15✎ 12:37 | 
        (0) выключить итоги, выбрать регистраторов по месяцам, каждый месяц запустить в своем фоновом задании или в своем сеансе 1с     | |||
| 47
    
        vogenut 02.06.15✎ 12:37 | 
        (42) Набор все равно зачитывается, самой платформой.     | |||
| 48
    
        Fragster гуру 02.06.15✎ 12:37 | 
        (46)+ ну, или по количеству ядер процессора     | |||
| 49
    
        Fragster гуру 02.06.15✎ 12:39 | 
        ну и база должна быть клиент-серверной, и на сервере должны быть диски нормальные, а не один wd green 5400 оборотов     | |||
| 50
    
        bolobol 02.06.15✎ 12:42 | 
        (49) Думается, закупить нормальные диски для разовой операции - это не совсем адекватно)     | |||
| 51
    
        Fragster гуру 02.06.15✎ 12:42 | 
        (50) ну вдруг там они уже стоят на сервере?     | |||
| 52
    
        Мыш 02.06.15✎ 12:43 | 
        Итоги отключить, несомненно.     | |||
| 53
    
        Fragster гуру 02.06.15✎ 12:44 | 
        (51)+ вот в публикации http://catalog.mista.ru/public/173394/ как раз измеряется скорость записи наборов. какие красивые графики при увеличении количества параллельных сеансов.     | |||
| 55
    
        Fragster гуру 02.06.15✎ 12:46 |   | |||
| 56
    
        Волшебник модератор 02.06.15✎ 12:47 | 
        (46) да-да, всё нужно делать параллельно     | |||
| 57
    
        pessok 02.06.15✎ 12:50 | 
        (55) абсцисса - количество потоков?     | |||
| 58
    
        bodri 02.06.15✎ 12:52 | 
        Опытным путем добился следующих результатов за минуту действий
 (0) + отключение итогов 531 обращение за 20,92 сек. (7) + отключение итогов 715 обращений за 28,52 сек. | |||
| 59
    
        Fragster гуру 02.06.15✎ 12:53 | 
        (57) да     | |||
| 60
    
        Fragster гуру 02.06.15✎ 12:54 | 
        интересно, там веб сервис обмена результатами еще работает?     | |||
| 61
    
        hhhh 02.06.15✎ 12:54 | 
        (58) ну ОбменДанными.Загрузка = Истина ставил?     | |||
| 62
    
        Redkiy 02.06.15✎ 12:58 | 
        (0) а сам запрос не обсуждается?
 Для чего там группировки и лишние реквизиты (Сумма)? | |||
| 63
    
        pessok 02.06.15✎ 13:00 | 
        (62) говорят, что надо :)     | |||
| 64
    
        bodri 02.06.15✎ 13:06 | 
        (62) -> (4)     | |||
| 65
    
        vogenut 02.06.15✎ 13:08 | 
        (58) Транзакцию пробовал?     | |||
| 66
    
        pessok 02.06.15✎ 13:08 | 
        (64) ну как, распараллелил?     | |||
| 67
    
        bodri 02.06.15✎ 13:11 | 
        (65) да, почти без результатов, по началу вроде шустро, но потом, после 10к записей сильное замедление, даже если разделять по количеству транзакция.
 Всем спасибо за советы и обсуждение. Самый оптимальный для меня по времени, мой вариант с отключением итогов | |||
| 68
    
        pessok 02.06.15✎ 13:12 | 
        (67) в потоках будет быстрее, но больше кода     | |||
| 69
    
        bodri 02.06.15✎ 13:14 | 
        (68) поподробней?     | |||
| 70
    
        Fragster гуру 02.06.15✎ 13:16 | 
        (68) надо запустить несколько сеансов по разным периодам и все. если итоги не отключены - то еще разрешить разделение итогов, но лучше все-таки итоги отключить.     | |||
| 71
    
        pessok 02.06.15✎ 13:18 | 
        (69) разбить поквартально, запустить для каждого квартала свое фоновое задание по очистке
 (70) можно и так, но красивее все же фоновыми | |||
| 72
    
        Zhuravlik 02.06.15✎ 13:19 | 
        Почему-то никто не сказал про truncate в СУБД.     | |||
| 73
    
        Zhuravlik 02.06.15✎ 13:20 | 
        + Или база файловая?     | |||
| 74
    
        pessok 02.06.15✎ 13:20 | 
        (72) посмотри на секцию ГДЕ в запросе     | |||
| 75
    
        ЧеловекДуши 02.06.15✎ 13:20 | 
        (69) Несколько фоновых заданий.     | |||
| 76
    
        ДенисЧ 02.06.15✎ 13:20 | 
        (72) Потому что большинство тех, кто знает о транкейте, догадывается, что им нельзя удалить только часть данных     | |||
| 77
    
        pessok 02.06.15✎ 13:22 | 
        но вообще, DELETE FROM Таблица WHERE Условие     | |||
| 78
    
        Волшебник модератор 02.06.15✎ 13:23 | 
        (77) да ты гений     | |||
| 79
    
        Zhuravlik 02.06.15✎ 13:24 | 
        (76) я из меньшинства) Почему-то думал у него есть параметры.
 (77) +1 На разл. обменах чистить тестовые РС - это ад просто, то-ли дело напрямую - пара секунд там, где 1С думает около часа... | |||
| 80
    
        pessok 02.06.15✎ 13:27 | 
        от только 1С строго-настрого запрещает вручную ковыряться в таблицах     | |||
| 81
    
        Fragster гуру 02.06.15✎ 13:28 | 
        (80) правильно. а то такие, как (79) фиганут данные, а потом за них ошметки вычищать     | |||
| 82
    
        bodri 02.06.15✎ 13:39 | 
        с отключением итогов тоже, что-то долго получается
 без отключения 1,5 часа 1 квартал, с отключением 15 минут чистит и уже 30 минут включает итоги. | |||
| 83
    
        Fragster гуру 02.06.15✎ 13:40 | 
        (82) ну значит, для параллельного удаления не отключай итоги, а включай разделение итогов     | |||
| 84
    
        Волшебник модератор 02.06.15✎ 13:43 | 
        (82) В чём проблема оставить на ночь? За 4 часа он всё удалит. Потом за 30 минут включишь итоги     | |||
| 85
    
        bodri 02.06.15✎ 13:46 | 
        (84) в принципе проблемы нет с включением на ночь, так и планировал сделать с рабочей базой.     | |||
| 86
    
        Зеленый пень 02.06.15✎ 13:48 | 
        Когда наконец 1С разрешит массовые операции над таблицами?     | |||
| 87
    
        Волшебник модератор 02.06.15✎ 13:59 | 
        (85) Сделай ещё 8 сеансов на каждый год. Действуй.     | |||
| 88
    
        Zhuravlik 02.06.15✎ 14:03 | 
        (81) не надо про "такие как" - я бы не стал использовать не до конца понятный мне механизм в боевой базе. Сказал же - тестовые РС чистил. И можно узнать, о каких ошметках идет речь, если я чищу РС? Индексы?     | |||
| 89
    
        Fragster гуру 02.06.15✎ 14:12 | 
        (88) регистрация изменений. бесконечное количество того, что выполняется в обработки ПередЗаписью и ПриЗаписи. для периодических РС и 8.3.5 - таблицы итогов.     | |||
| 90
    
        Zhuravlik 02.06.15✎ 16:00 | 
        (89) спасибо, действительно про планы обмена     | |||
| 91
    
        Zhuravlik 02.06.15✎ 16:00 | 
        не подумал)     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |