Как отключить замер производительности и очистить регистры замера времени в 1С для уменьшения размера базы?

Системный администратор 1С v8.3 (Управляемые формы) 1C:Бухгалтерия IT и автоматизация бизнеса
← На главную

При активной работе пользователей в конфигурации 1С:Бухгалтерия предприятия 3.0 (и других решениях на базе Библиотеки стандартных подсистем — БСП) администраторы часто сталкиваются с лавинообразным ростом размера базы данных. Одной из неочевидных, но крайне распространенных причин этого «раздувания» является встроенный механизм оценки производительности (Apdex). В процессе работы система непрерывно фиксирует время выполнения ключевых операций и записывает эти метрики в специализированные регистры. Со временем объем этих данных начинает исчисляться миллионами записей, что может занимать от 30% до 50% общего объема базы данных, вызывать зависания при резервном копировании и существенно замедлять процедуры тестирования и исправления (ТИИ).

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

Какое влияние оказывает замер производительности на базу данных?

Существует заблуждение, что отключение замеров производительности практически не влияет на физический размер базы данных. На практике это не так. В активно используемых базах (особенно при работе десятков и сотен пользователей в файловом режиме или СУБД) регистр сведений ЗамерыВремени за несколько месяцев может вырасти до гигантских размеров. Это приводит к следующим проблемам:

  1. Существенное увеличение размера файлов БД. Файловые базы 1Cv8.1CD могут необоснованно раздуваться на несколько гигабайт.
  2. Снижение производительности СУБД. Накопление огромного количества записей в индексах таблиц замеров замедляет выполнение других дисковых операций чтения и записи.
  3. Проблемы при обслуживании. Процедуры реиндексации, реструктуризации и выгрузки/загрузки базы данных (.dt) начинают занимать в разы больше времени или завершаться аварийно.

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

Шаг 1. Отключение механизма оценки производительности в интерфейсе

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

  1. Запустим программу 1С:Бухгалтерия 3.0 в режиме «Предприятие» под пользователем с правами администратора.
  2. Перейдем в раздел меню Администрирование, далее выберем пункт Обслуживание (в некоторых версиях — Поддержка и обслуживание).
  3. Раскроем группу настроек Оценка производительности.
  4. Снимем флажок (чекбокс) у пункта Оценка производительности. При снятии этого флажка константа ВыполнятьЗамерыПроизводительности принимает значение Ложь, что блокирует дальнейшую запись метрик в базу данных.

После выполнения этих шагов система перестанет фиксировать новые замеры. Однако важно понимать, что уже накопленные миллионы записей автоматически из базы данных не удаляются. Нам необходимо выполнить их очистку. Перед выбором способа очистки можно сопоставить регистры замеров с физическими таблицами и оценить объём данных через обследование базы 1С. Эта обработка ничего не удаляет; найденное имя таблицы не делает прямой TRUNCATE безопасным.

Шаг 2. Анализ задействованных регистров и объектов

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

Шаг 3. Штатная очистка накопленных замеров через регламентные задания

В составе Библиотеки стандартных подсистем предусмотрен встроенный автоматический механизм очистки устаревших данных. Мы можем использовать его для штатного удаления информации:

  1. В том же разделе Администрирование — Обслуживание найдем ссылку Настройки рядом с флажком оценки производительности. Там по умолчанию задан срок хранения замеров (например, 100 дней). Временно установим этот параметр в минимальное значение (например, 1 день).
  2. Перейдем в подраздел Регламентные и фоновые задания (ссылка находится в группе Регламентные операции раздела обслуживания).
  3. Найдем в списке регламентное задание с наименованием «Очистка замеров времени».
  4. Нажмем кнопку Выполнить сейчас на панели управления.

Это действие запустит фоновый процесс, который вызовет встроенную экспортную процедуру БСП: ОценкаПроизводительности.ОчиститьРегистрыЗамерыВремени(). Программа начнет удалять записи, срок хранения которых превысил установленный нами лимит.

Что делать, если база зависает или падает с ошибкой нехватки памяти?

На практике, если регистр ЗамерыВремени разросся до колоссальных размеров (более 5–10 миллионов записей), стандартный запуск регламентного задания или попытка очистить регистр методом НаборЗаписей.Записать() в лоб приводит к аварийному завершению работы платформы 1С с ошибкой Out of memory (Нехватка памяти) или к бесконечной блокировке таблиц СУБД. Рассмотрим три альтернативных, профессиональных решения этой проблемы.

Вариант А. Программная очистка порциями (для файловых баз)

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


Выборка = РегистрыСведений.ЗамерыВремени.Выбрать();
Счетчик = 0;

Пока Выборка.Следующий() Цикл
    ЗаписьМенеджер = Выборка.ПолучитьМенеджерЗаписи();
    ЗаписьМенеджер.Удалить();
    
    Счетчик = Счетчик + 1;
    // Каждые 10 000 удалений принудительно фиксируем транзакцию, чтобы освободить оперативную память
    Если Счетчик % 10000 = 0 Тогда
        ОбработкаПрерыванияПользователя();
        Состояние("Удалено записей: " + Счетчик);
    КонецЕсли;
КонецЦикла;

Этот способ работает медленнее, но гарантирует, что файловая база данных не будет повреждена из-за критического сбоя нехватки ресурсов во время транзакции удаления.

Вариант Б. Прямая очистка на уровне СУБД (для клиент-серверного варианта)

Если ваша база данных развернута на SQL-сервере (MS SQL Server, PostgreSQL, IBM DB2), то самым быстрым и безопасным решением будет очистка таблиц напрямую через консоль управления СУБД с помощью высокопроизводительной команды TRUNCATE TABLE. Этот метод мгновенно очищает таблицу, минуя запись логов транзакций на каждое удаление строки.

Важно: Перед выполнением запросов к СУБД необходимо обязательно завершить все сеансы пользователей и сделать резервную копию базы данных!

Разберем алгоритм по шагам:

  1. Сначала нам нужно узнать точные физические имена таблиц СУБД, которые соответствуют нужным регистрам сведений 1С. Для этого выполним в конфигураторе или внешней обработке следующий код:
    
    имяТаблицыЗамеры = ПолучитьСтруктуруХраненияБазыДанных().Найти("РегистрСведений.ЗамерыВремени", "ИмяМетаданных").ИмяТаблицыХранения;
    Сообщить("Имя таблицы в SQL: " + имяТаблицыЗамеры);
    
  2. Допустим, система выдала нам имя таблицы _InfoRg12345.
  3. Откроем консоль СУБД (например, SQL Server Management Studio для MS SQL) и выполним следующий SQL-запрос:
    
    -- Очищаем основную таблицу замеров времени
    TRUNCATE TABLE _InfoRg12345;
    
    -- Повторяем процедуру для таблицы технологических замеров (выяснив предварительно ее SQL-имя)
    TRUNCATE TABLE _InfoRg67890;
    

После этого таблицы в базе данных мгновенно станут абсолютно пустыми, а физический объем файлов логов и данных СУБД можно будет уменьшить через стандартную операцию сжатия базы данных (Shrink).

Вариант В. Использование специализированных утилит (для файловых баз)

Если база работает в файловом формате, а попытка запустить очистку средствами 1С приводит к падению, администраторы прибегают к помощи сторонних низкоуровневых утилит работы с файлами .1CD (например, Tool_1CD или аналогичные средства просмотра структуры). Эти инструменты позволяют напрямую очистить строки таблицы нужного регистра непосредственно в самом файле БД без инициализации движка платформы 1С:Предприятие, что полностью исключает падение по памяти.

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

← На главную