Актуализация данных регистров накопления

Обработки - Свертка базы

Актуализация данных регистров накопления или как, не особо напрягаясь, уменьшить размер базы и ускорить 1С

Обязательно делайте бекапы. Тестируйте только на копии. Если на копии все получилось успешно - протестируйте на ней еще раз.

Вводные данные:

  • Самописная или сильно измененная типовая конфигурация
  • Отключен контроль остатков
  • Режим работы "24х7"
  • Большой размер БД

Как-то раз заметили, что объем рабочей базы сильно увеличился. Измеритель показал, что в лидеры вырвались регистры накоплений. Таблица итогов ТОП 10 регистров в несколько раз превышала размер основной таблицы. Начали анализировать - оказалось, что в них появились записи с периодом около начала нашей эры. Соответственно от этой даты и начались создаваться записи в таблицах итогов до текущего момента.

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

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

  1. Просто просмотр данных - показывает, сколько есть записей по каждому РН до даты актуализации.
  2. Режим актуализации - поиск и перенос периода в данных.

В принципе кнопок там минимум, режим работы показан на скриншотах.

Просмотр данных

Актуализация данных

Оптимизация и ускорение.

Но предыдущие действия не сильно помогут, т.к. старые итоги не пересчитываются. Их нужно заново пересчитать. Это можно сделать через "Тестирование и исправление" в конфигураторе. Но поскольку старые записи удаляются методом DELETE , а не TRUNCATE в СУБД - это будет происходить очень долго ну и плюс ко всему в монопольном режиме. Очень хорошо расписано в статье. Для ускорения можно предварительно очистить эти таблицы в СУБД (у меня был MS SQL).
Вот дорабтанный скрипт для MS SQL, который сгенерирует и выполнить запросы для очистки таблиц итогов в контексте определенной базы данных.

declare @code varchar(300)
DECLARE Employee_Cursor CURSOR FOR
SELECT 'TRUNCATE TABLE ' + name as [code] FROM sys.tables
WHERE name like '_AccumRgT%';
OPEN Employee_Cursor;
FETCH NEXT FROM Employee_Cursor into @code;
WHILE @@FETCH_STATUS = 0
   BEGIN
	  print @code;
      FETCH NEXT FROM Employee_Cursor  into @code;
	  exec (@code);
   END;
CLOSE Employee_Cursor;
DEALLOCATE Employee_Cursor;
GO

В итоге общий размер таблиц РН сократился втрое с 30 ГБ. Уменьшились таблицы итогов, и поиск по ним стал происходить заметно быстрее. 

Скачать файлы

Наименование Файл Версия Размер
Актуализация данных регистров накопления.epf
.epf 8,05Kb
15.09.15
21
.epf 8,05Kb 21 Скачать

См. также

Комментарии
1. Dpotapov (Danil.Potapov) 15.09.15 22:52 Сейчас в теме
Если база на 8.3, то для защиты от этого желательно установить у каждого регистра свойство начало расчета итогов.
Если кто-то боится лезть в SQL, то достаточно выполнить в режиме предприятия полные пересчет итогов путем выставления даты актуальности итогов 001.01.01, после выполнения установить дату итогов в нужный период (при этом система будет очищать через delete, но пользователи хоть с замедлением, но будут работать).
2. Головаченко Дима (Smaylukk) 540 16.09.15 12:15 Сейчас в теме
(1) , спасибо за отзыв. Про свойство начала расчета итогов не знал, спасибо еще раз.
Про второй вариант - у нас бы не прокатило, т.к. база и так не шустрая плюс еще пересчет - пользователи бы повесились.
Но кому-то может помочь.
Оставьте свое сообщение