gifts2017

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

Опубликовал Головаченко Дима (Smaylukk) в раздел Обработки - Свертка базы

Актуализация данных регистров накопления или как, не особо напрягаясь, уменьшить размер базы и ускорить 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 7
.epf 8,05Kb
15.09.15
7
.epf 8,05Kb Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

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