Работа с бесплатной версией MS SQL Server Express накладывает на администраторов 1С существенное ограничение: размер одного файла базы данных (MDF) не может превышать 10 ГБ. Как только этот порог достигается, СУБД блокирует любые операции записи, что приводит к остановке работы пользователей. В этой статье мы разберем, как детально проанализировать структуру хранения данных, выявить "виновников" разрастания базы и вернуть систему в рабочее состояние.
Прежде чем приступать к очистке, нам необходимо четко понимать, как работают лимиты SQL Express. Рассмотрим основные нюансы:
.mdf. Файлы логов транзакций (.ldf) могут быть значительно больше, и они не вызывают блокировку по лимиту Express-издания.FILESTREAM, эти данные не учитываются в лимите 10 ГБ. Это один из способов «обмануть» ограничение, вынося тяжелый контент за пределы базы.Когда база «встала», первым делом выясним, какая именно таблица занимает больше всего места. Мы не будем гадать, а воспользуемся встроенными инструментами SQL Server Management Studio (SSMS). Проанализируем ситуацию с помощью стандартного отчета.
Разберем последовательность действий:
В открывшемся отчете мы увидим список всех таблиц. Особое внимание уделим колонке «Зарезервировано» (Reserved) и «Данные» (Data). Например, если мы видим таблицу с именем dbo._InfoRg24424, занимающую около 7 ГБ, это явный кандидат на очистку.
Имена таблиц в SQL (например, _InfoRg24424 или _Document155) мало что говорят обычному пользователю. Нам нужно понять, какой объект метаданных за ними скрывается. Проанализируем способы сопоставления:
Способ А: Программный метод (универсальный)
Мы можем использовать встроенную функцию платформы ПолучитьСтруктуруХраненияБазыДанных(). Рассмотрим пример кода, который можно запустить в обработке или консоли кода:
СтруктураХранения = ПолучитьСтруктуруХраненияБазыДанных();
Для Каждого Таблица Из СтруктураХранения Цикл
Если Таблица.ИмяТаблицыХранения = "_InfoRg24424" Тогда
Сообщить("Имя объекта в 1С: " + Таблица.ИмяТаблицы);
Сообщить("Метаданные: " + Таблица.Метаданные);
КонецЕсли;
КонецЦикла;
Способ Б: Использование префиксов
Зная префиксы, можно быстро сориентироваться в типе объекта:
_InfoRg — Регистр сведений (Information Register)._AccumRg — Регистр накопления (Accumulation Register)._Document — Документ._Reference — Справочник.Как показывает практика, чаще всего в «раздувании» базы виноват регистр «Версии объектов» (или «История данных»). В SQL он часто выглядит как тяжелый _InfoRg. Рассмотрим, почему это происходит.
Версионирование сохраняет копию объекта при каждом его изменении. Если в расширении или основной конфигурации включено версионирование для часто изменяемых документов, таблица вырастет до гигантских размеров за считанные месяцы. Выясним причину: в нашем примере таблица содержит более 2 миллионов записей, что для SQL Express является критическим объемом.
Просто удалить записи из 1С может быть недостаточно, а иногда и невозможно из-за нехватки места для лога транзакций. Разберем правильный алгоритм:
Simple (Простая). Это позволит SQL серверу не накапливать гигантский лог транзакций.
Клик правой кнопкой на БД -> Properties -> Options -> Recovery Model: Simple.
Администрирование — Общие настройки — История изменений. Настройте расписание очистки и нажмите «Очистить сейчас».Очистка устаревших версий объектов, предварительно установив срок хранения (например, «За последний месяц»).Важный момент: после удаления данных из таблиц размер файла .mdf на диске не уменьшится автоматически. SQL Server просто пометит это место как «свободное внутри файла». Чтобы операционная система увидела освободившееся место и лимит 10 ГБ перестал быть критическим, необходимо выполнить сжатие.
Рассмотрим, как выполнить Shrink правильно:
Важно: Не злоупотребляйте сжатием в обычное время, так как это вызывает сильную фрагментацию индексов. Используйте его только как экстренную меру при достижении лимитов SQL Express.
Чтобы база снова не «вылетела» за пределы 10 ГБ, проанализируем следующие рекомендации:
REORGANIZE вместо REBUILD для экономии места в процессе выполнения.Таким образом, системный подход к мониторингу размеров таблиц и своевременная очистка технических данных (логов, версий, кэшей) позволяют успешно эксплуатировать даже крупные базы 1С на бесплатном SQL Server Express.