Удаление записей регистров и пересчет итогов в условиях нехватки места на диске

Публикация № 1044910

Администрирование - Администрирование данных 1С - Чистка базы

Удаление записей регистров пересчет итогов недостаточно места на диске

0
При обследовании базы нередко видишь незакрывающиеся регистры накопления с момента начала работы системы. Всегда есть два варианта: первый - закрываем  ежемесячно регистр в ноль и настраиваем бизнес процесс так, чтобы этот регистр правильно использовался, второй вариант - этот регистр не использовался и не будет использоваться в данной конфигурации. Второму варианту я и хочу посвятить данную статью.

При обследовании базы нередко видишь незакрывающиеся регистры накопления с момента начала работы системы. Всегда есть два варианта: первый - закрываем  ежемесячно регистр в ноль и настраиваем бизнес процесс так, чтобы этот регистр правильно использовался, второй вариант - этот регистр не использовался и не будет использоваться в данной конфигурации. Второму варианту я и хочу посвятить данную статью.

Конечно, многие скажут "А что тут делать, убей все записи в регистре и все хорошо", но тут возникает другое условие, это нехватка места на диске для проведения данной операции, т.к. при удалении всех записей в регистре и пересчете итогов лог раздувается до небывалых размеров.

Сразу же рождается решение, удалять записи регистра порциями, что я изначально и делал:

 
Запрос = Новый Запрос("ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 100
             |НДСПредъявленный.Регистратор
             |ИЗ
             |РегистрНакопления.НДСПредъявленный КАК НДСПредъявленный");

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
                НаборЗаписей=РегистрыНакопления.НДСПредъявленный.СоздатьНаборЗаписей();
                НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор);
                НаборЗаписей.Записать();
КонецЦикла;

 

После каждой порции удаленных записей необходимо смотреть на лог, а вдруг сильно увеличился. Берем и зацикливаем данную процедуру , смотрим на размер лога, как только достиг определенного размера останавливаем выполнение,  делаем шринк лога.  И так пока не удалим все записи.

Очистив записи, нужно пересчитать итоги, а объем таблицы итогов обычно в разы больше, чем размер очищенного  регистра. При использовании стандартного механизма пересчета итогов, опять возникает  проблема нехватки места на диске.

Для этого я реализовал следующую процедуру:              

ДатаИтогов1 = РегистрыНакопления.НДСПредъявленный.ПолучитьПериодРассчитанныхИтогов();
ПланируемаяДатаИтогов = ДобавитьМесяц(ДатаИтогов1,-1);                          
РегистрыНакопления.НДСПредъявленный.УстановитьПериодРассчитанныхИтогов(ПланируемаяДатаИтогов);

Данная процедура уменьшает период рассчитанных итогов на 1 месяц, тем самым порционно уменьшает количество записей в таблице итогов. Ну и здесь так же, как и с регистром, зацикливаем и ждем увеличения размера лога до определенного размера.

Но на этом я не успокоился, как говорится "Лень - двигатель прогресса", мне не хотелось сидеть и смотреть за логом, увеличился он или нет, поэтому было принято решение, что лог будет чистится автоматически при достижении определенного размера.

 Для этого я написал простенькую функцию, которая после очистки очередной порции подсчитывает размер лога и сравнивает его с заданным значением, и если размер лога вырос подключается к базе (MSSQL) и выполняет команду

dbcc shrinkfile (DB_log) --Очистка лога.

 

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

Вышеописанная реализация хорошо подходит для регистров с небольшим количеством записей, как и говорилось выше. Но если записей несколько миллионов, то это долго.  

Для увеличения скорости удаления записей, я узнал название таблицы в базе MSSQL, зашел в базу и очистил данную таблицу, следующей командой 

TRUNCATE TABLE _AccumRg1923

, где "_AccumRg1923" мой регистр. После чего я вызвал вышеописанную обработку и почистил итоги.

 

Сразу же скажу, что не стоит очищать таблицу итогов таким способом. После применения данного метода для таблицы итогов, у меня начали вылетать ошибки при проведении документов.

Ну и в конце статьи хочу сказать про функции УстановитьИспользованиеИтогов() , УстановитьИспользованиеТекущихИтогов(). Ими стоит пользоваться, когда ты точно уверен, что размер лога не заполнит весь объем свободного пространства на диске.

 

P.S.: Это моя первая статья,  прошу не судить строго.

0

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. fishca 1153 17.04.19 10:26 Сейчас в теме
Знание сила! Особенная сила заключается в знании чем отличается
- TRUNCATE TABLE и delete from table на уровне sql server
2. fishca 1153 17.04.19 10:28 Сейчас в теме
Про итоговые таблицы еще надо не забыть.
3. ice-net 17 17.04.19 11:22 Сейчас в теме
А еще можно подписками на события очищать наборы перед записью в регистр, если он не нужен, что бы не чистить каждый раз.
Или если редактирование конфигурации позволяет (или расширения) переписать процедуры формирования движений, что бы не тратить ресурсы впустую.
4. Константин С. 597 17.04.19 11:47 Сейчас в теме
в условиях нехватки места на диске

может проблема в этом? Тем более на рабочей системе.
5. KiLLius 17.04.19 15:56 Сейчас в теме
А о каком логе идёт речь?
6. semensemenbi4 18.04.19 02:51 Сейчас в теме
(5) Журнал транзакций - The Transaction Log
7. KiLLius 18.04.19 08:04 Сейчас в теме
(6) А на время чистки записей, можно же перевести базу в тип восстановления sipmpe и тогда журнал транзакций совсем не будет расти. Просто я регулярно нечто похожим занимаюсь, и делаю именно так.
Дмитрий74Чел; +1 Ответить
8. semensemenbi4 19.04.19 08:30 Сейчас в теме
(7) На время выполнения одной транзакции в режиме восстановления simple журнал пишется, чтобы в случае чего восстановится. Когда в одной операции делается очистка регистра у которого размер больше чем объем свободной памяти, то возникает ошибка "Недостаточно места на диске".
Оставьте свое сообщение

См. также

Как быстро "удалить все документы и движения" в базе (Альтернатива) 57

Статья Системный администратор Нет файла v8 Бесплатно (free) Чистка базы

Очень часто задают вопрос - как удалить все документы из базы, оставить только номенклатуру и настройки. Есть много различных вариантов (групповая обработка документов и справочников - да, работает, но медленно, у клиента в базе 460 000 документов проведенных - неделю будет удалять). Перенос данных - через ВыгрузкаЗагрузкаДанныхXML82.epf - можно, но тоже долго и требует определенных навыков.

06.03.2018    15173    Tatitutu    21       

Если при рассылке закончилось место 5

Статья Системный администратор Программист Нет файла v8 Россия Windows Бесплатно (free) Чистка базы

С некоторого релиза, не могу сказать точно с какого, при проведении массовой рассылки писем с вложениями стало быстро заканчиваться место. Как я это обнаружил и что с этим сделал, напишу ниже. Очень приветствуются другие варианты решения в комментариях.

23.03.2017    6851    hydro2588_2015    19       

Удаление лишних данных 17

Статья Системный администратор Программист Нет файла v8 Бесплатно (free) Чистка базы

Настало то время, когда на SSD винчестерах размером 120 Гб начало заканчиваться место.  В связи с этим, было принято решение проанализиривать возможность уменьшения занимаемого места БД. Без веского обоснования у нас никакие работы не производятся, просто так оптимизацией никто заниматься не даст. 1. Выявление таблиц БД, занимающих много места. 2. Очистка записей регистров накопления. 3. Тестирование.

25.11.2016    12250    HAMMER_59    10       

Версионирование объектов в 1С УПП 1.3. Фикс дублей 10

Статья Системный администратор Программист Нет файла v8 УПП1 Россия Windows Бесплатно (free) Чистка базы Производительность и оптимизация (HighLoad)

В 1С УПП 1.3 есть такой замечательный механизм "версионирование объектов", который позволяет узнать: кто, когда и что изменил в документах и справочниках. Но есть недочеты в этой системе, программа не проверяет, является ли текущая записываемая версия объекта дублем (аналогична предыдущей версии), что в итоге захламляет базу и существенно увеличивает её объем.

1 стартмани

16.11.2015    11298    tehas    4       

БГУ 1.0. Чистим отчётность 11

Статья Системный администратор Нет файла v8 БГУ Государственные, бюджетные структуры Россия БУ Windows Бесплатно (free) Чистка базы

Временами встречается проблема с заполнением бюджетной (бухгалтерской) отчётности в БГУ 1.0. По разным причинам отчётность может заполняться неправильно или не заполняться совсем. В данной статье приведена методика быстрой «чистки» отчётности.

29.09.2015    13760    Sergey123321    6       

Задвоение элементов плана счетов в базе на SQL. 3

Статья Программист Нет файла v8 Windows Бесплатно (free) Чистка базы

Иногда приходится разбираться с "грехами отцов", когда приходишь к клиенту, а до тебя наделали делов. Вот, собственно, проблема: Настраивали когда-то план обмена, все работало штатно. Потом обмен пошел не как надо и в справочниках появились задвоенные предопределенные элементы. В общем, на Инфостарте нашел кучу обработок, которые помогут. Но тут оказалось, что если работать с элементом "ПланСчетов", эти обработки бесполезны.

27.08.2015    6805    vasyalisk88    17       

Фоновое Задание "Удаление помеченных объектов" (не монопольно) 40

Статья Программист Нет файла v8 1cv8.cf Россия Windows Бесплатно (free) Чистка базы

Подробное описание немонопольного удаления помеченных объектов, реализованное как Фоновое Задание.

02.08.2013    19344    shvo65    10       

Как свертывать большую базу 1C 8 в максимально короткие сроки (1С 8.1, 8.2) 62

Статья Системный администратор Программист Нет файла v8 УТ10 Windows Бесплатно (free) Свертка базы Чистка базы Производительность и оптимизация (HighLoad)

Как свертывать большую базу 1C 8 в максимально короткие сроки (1С 8.1, 8.2). Любая база данных со временем разрастается до огромных размеров, что делает его более медлительным и работать в нем порой бывает очень тяжело. По этому периодически базу свертывают, т.е. до определенной даты все документы и движения удаляются и вводятся начальные остатки. Соответственно всегда есть архивная база за прошлые периоды. Пример свертки базы 1С на SQL приведен здесь.

14.06.2013    55012    setrak    21       

Удаление помеченных объектов группами 10

Инструменты и обработки Системный администратор Внешняя обработка (ert,epf) v8 1cv8.cf Россия Бесплатно (free) Чистка базы

Предлагаемая обработка поможет в тех случаях когда в базе накопилось много помеченных на удаление объектов и штатными средствами удалить их не получается.

28.09.2010    12606    283    mrWatson    13       

Очистка БД от документов всех организаций (фирм) кроме указанной 50

Инструменты и обработки Системный администратор Программист Внешняя обработка (ert,epf) v8 1cv8.cf Россия Бесплатно (free) Чистка базы

Надо было скинуть слепок БД в вышестоящую организацию, но руководство справедливо решило, что все что по этой организации пусть видят, а вот остальные движения там на фиг не нужны, ну и накорябал сие, может ещё кому нить пригодится... Пользуйтесь

23.05.2010    29468    612    Farpost    15       

Универсальная обработка aaDeleteUpdate для 1C v8.2 4

Инструменты и обработки Системный администратор Программист Внешняя обработка (ert,epf) v8 1cv8.cf Бесплатно (free) Чистка базы Инструментарий разработчика

В 1С к сожалению в языке запросов отсутствуют Delete и Update. Данная обработка немного решает эту проблему для объектных типов (справочник, документ, ..)

05.05.2010    3413    78    vadimsntn    1       

Универсальная обработка aaDeleteUpdate 6

Инструменты и обработки Системный администратор Программист Внешняя обработка (ert,epf) v8 1cv8.cf Бесплатно (free) Чистка базы Инструментарий разработчика

К сожалению в языке запросов 1С отсутствуют Delete и Update. Данная обработка немного решает эту проблему для объектных типов (справочник, документ, ..) Выкладываю заново - исправил ошибку

12.04.2010    2665    58    vadimsntn    7       

Поиск ссылок на объект для последующего удаления объектов. 271

Инструменты и обработки Системный администратор Внешняя обработка (ert,epf) v8 1cv8.cf Россия Бесплатно (free) Чистка базы Поиск данных

Иногда бывает нужно найти все ссылки на конкретный документ или любой другой объект системы, чтобы все это удалить...

12.01.2010    47755    2623    YAN    44       

Полное удаление организации из базы 48

Инструменты и обработки Системный администратор Программист Внешняя обработка (ert,epf) v8 1cv8.cf Бесплатно (free) Чистка базы

Полное удаление Организации и всех зависимых объектов для версии 8.0

27.02.2009    35939    3653    ganelin    26       

Групповая обработка документов (признаки и непосредственное удаление) 28

Инструменты и обработки no Внешняя обработка (ert,epf) v8 1cv8.cf Бесплатно (free) Сервисные утилиты Чистка базы Обработка документов

Обработка сделана для более наглядного отображения процесса групповой работы с документами, чем штатная. И никак не претендует на оригинальность жанра. Требовалась простота и наглядность по работе с признаками документов и их непосредственным удалением из базы.

16.01.2008    19788    1175    Шёпот теней    18       

Поиск и замена дублей + v0.99 436

Инструменты и обработки Системный администратор Программист Внешняя обработка (ert,epf) v8 1cv8.cf Бесплатно (free) Чистка базы Поиск данных Тестирование и исправление

Обработка позволяет выполнять гибкий поиск, замену и удаление дублирующихся элементов любого справочника или плана видов характеристик.

03.08.2007    68111    5674    tormozit    222       

Универсальная обработка по поиску дубликатов в справочниках для 1С 8.0-8.1 38

Инструменты и обработки Системный администратор Программист Внешняя обработка (ert,epf) v8 1cv8.cf Бесплатно (free) Чистка базы Поиск данных Тестирование и исправление

Универсальная обработка по поиску дубликатов в любых справочниках по любым реквизитам!!! Теперь и для 8 версии 1С. Была сделана в связи с неудобностью стандартной обработки, и отображения "похожих" дубликатов, т.е. не 100%.

14.06.2007    17561    1013    denukraine    16