При активной работе пользователей в конфигурации 1С:Бухгалтерия предприятия 3.0 (и других решениях на базе Библиотеки стандартных подсистем — БСП) администраторы часто сталкиваются с лавинообразным ростом размера базы данных. Одной из неочевидных, но крайне распространенных причин этого «раздувания» является встроенный механизм оценки производительности (Apdex). В процессе работы система непрерывно фиксирует время выполнения ключевых операций и записывает эти метрики в специализированные регистры. Со временем объем этих данных начинает исчисляться миллионами записей, что может занимать от 30% до 50% общего объема базы данных, вызывать зависания при резервном копировании и существенно замедлять процедуры тестирования и исправления (ТИИ).
В рамках этой статьи мы подробно разберем, как полностью отключить механизм фиксации замеров производительности, какие именно объекты конфигурации задействованы в этом процессе, а также рассмотрим безопасные и эффективные методы очистки накопленных данных без риска уронить систему по нехватке оперативной памяти.
Существует заблуждение, что отключение замеров производительности практически не влияет на физический размер базы данных. На практике это не так. В активно используемых базах (особенно при работе десятков и сотен пользователей в файловом режиме или СУБД) регистр сведений ЗамерыВремени за несколько месяцев может вырасти до гигантских размеров. Это приводит к следующим проблемам:
1Cv8.1CD могут необоснованно раздуваться на несколько гигабайт..dt) начинают занимать в разы больше времени или завершаться аварийно.Поэтому отключение этой функции в базах, где не ведется целенаправленный аудит производительности (Apdex) со стороны разработчиков, является стандартным шагом оптимизации.
Для того чтобы новые записи перестали формироваться и нагружать систему, нам необходимо деактивировать функциональную опцию в пользовательском режиме. Выполним следующие действия:
ВыполнятьЗамерыПроизводительности принимает значение Ложь, что блокирует дальнейшую запись метрик в базу данных.После выполнения этих шагов система перестанет фиксировать новые замеры. Однако важно понимать, что уже накопленные миллионы записей автоматически из базы данных не удаляются. Нам необходимо выполнить их очистку. Перед выбором способа очистки можно сопоставить регистры замеров с физическими таблицами и оценить объём данных через обследование базы 1С. Эта обработка ничего не удаляет; найденное имя таблицы не делает прямой TRUNCATE безопасным.
Прежде чем приступать к удалению данных, выясним, какие именно объекты метаданных хранят информацию подсистемы Apdex. Это позволит нам провести полную и чистую уборку в конфигурации. Основными хранилищами являются:
ЗамерыВремени — основной рабочий регистр, куда записывается информация о времени выполнения каждой ключевой операции пользователя.ЗамерыВремениТехнологические — вспомогательный регистр, предназначенный для хранения детализированных технологических замеров системы.ЗамерыСтатистики — используется для накопления агрегированных статистических показателей работы конфигурации.КлючевыеОперации — содержит список всех измеряемых системных действий (например, «Проведение документа», «Открытие формы» и т.д.). Обратите внимание: сам справочник очищать не нужно, так как он содержит предопределенные элементы конфигурации и служит классификатором.В составе Библиотеки стандартных подсистем предусмотрен встроенный автоматический механизм очистки устаревших данных. Мы можем использовать его для штатного удаления информации:
Это действие запустит фоновый процесс, который вызовет встроенную экспортную процедуру БСП: ОценкаПроизводительности.ОчиститьРегистрыЗамерыВремени(). Программа начнет удалять записи, срок хранения которых превысил установленный нами лимит.
На практике, если регистр ЗамерыВремени разросся до колоссальных размеров (более 5–10 миллионов записей), стандартный запуск регламентного задания или попытка очистить регистр методом НаборЗаписей.Записать() в лоб приводит к аварийному завершению работы платформы 1С с ошибкой Out of memory (Нехватка памяти) или к бесконечной блокировке таблиц СУБД. Рассмотрим три альтернативных, профессиональных решения этой проблемы.
Для того чтобы не перегружать оперативную память сервера или локального компьютера, мы можем написать простую внешнюю обработку, которая будет выбирать записи регистра мелкими частями с помощью менеджера записи и последовательно удалять их. Проанализируем пример такого кода:
Выборка = РегистрыСведений.ЗамерыВремени.Выбрать();
Счетчик = 0;
Пока Выборка.Следующий() Цикл
ЗаписьМенеджер = Выборка.ПолучитьМенеджерЗаписи();
ЗаписьМенеджер.Удалить();
Счетчик = Счетчик + 1;
// Каждые 10 000 удалений принудительно фиксируем транзакцию, чтобы освободить оперативную память
Если Счетчик % 10000 = 0 Тогда
ОбработкаПрерыванияПользователя();
Состояние("Удалено записей: " + Счетчик);
КонецЕсли;
КонецЦикла;
Этот способ работает медленнее, но гарантирует, что файловая база данных не будет повреждена из-за критического сбоя нехватки ресурсов во время транзакции удаления.
Если ваша база данных развернута на SQL-сервере (MS SQL Server, PostgreSQL, IBM DB2), то самым быстрым и безопасным решением будет очистка таблиц напрямую через консоль управления СУБД с помощью высокопроизводительной команды TRUNCATE TABLE. Этот метод мгновенно очищает таблицу, минуя запись логов транзакций на каждое удаление строки.
Важно: Перед выполнением запросов к СУБД необходимо обязательно завершить все сеансы пользователей и сделать резервную копию базы данных!
Разберем алгоритм по шагам:
имяТаблицыЗамеры = ПолучитьСтруктуруХраненияБазыДанных().Найти("РегистрСведений.ЗамерыВремени", "ИмяМетаданных").ИмяТаблицыХранения;
Сообщить("Имя таблицы в SQL: " + имяТаблицыЗамеры);
_InfoRg12345.
-- Очищаем основную таблицу замеров времени
TRUNCATE TABLE _InfoRg12345;
-- Повторяем процедуру для таблицы технологических замеров (выяснив предварительно ее SQL-имя)
TRUNCATE TABLE _InfoRg67890;
После этого таблицы в базе данных мгновенно станут абсолютно пустыми, а физический объем файлов логов и данных СУБД можно будет уменьшить через стандартную операцию сжатия базы данных (Shrink).
Если база работает в файловом формате, а попытка запустить очистку средствами 1С приводит к падению, администраторы прибегают к помощи сторонних низкоуровневых утилит работы с файлами .1CD (например, Tool_1CD или аналогичные средства просмотра структуры). Эти инструменты позволяют напрямую очистить строки таблицы нужного регистра непосредственно в самом файле БД без инициализации движка платформы 1С:Предприятие, что полностью исключает падение по памяти.
Подводя итог, можно сказать, что своевременное отключение механизма замера производительности и последующая грамотная очистка связанных с ним регистров сведений ЗамерыВремени, ЗамерыВремениТехнологические и ЗамерыСтатистики — это эффективный и безопасный способ оптимизировать дисковое пространство, сократить время создания резервных копий и повысить общую стабильность работы информационной системы 1С.